protected virtual Bundle CreateActivityTransitionOptions( Intent intent, MvxActivityPresentationAttribute attribute, MvxViewModelRequest request) { ValidateArguments(attribute, request); if (intent == null) { throw new ArgumentNullException(nameof(intent)); } var bundle = Bundle.Empty !; if (CurrentActivity.IsActivityAlive() && CurrentActivity is IMvxAndroidSharedElements sharedElementsActivity && Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) { var(elements, transitionElementPairs) = GetTransitionElements(attribute, request, sharedElementsActivity); if (transitionElementPairs.Count == 0) { _logger.Value?.Warn("No transition elements are provided"); return(bundle); } var transitionElementsBundle = CreateTransitionElementsBundle(intent, transitionElementPairs, elements); if (transitionElementsBundle != null) { return(transitionElementsBundle); } }
protected override void ShowActivity(Type view, MvxActivityPresentationAttribute attribute, MvxViewModelRequest request) { var intent = CreateIntentForRequest(request); if (attribute.Extras != null) { intent.PutExtras(attribute.Extras); } var activity = CurrentActivity; if (activity == null) { MvxTrace.Warning("Cannot Resolve current top activity"); return; } var activityOptions = CreateActivityTransitionOptions(intent, attribute); if (activityOptions != null) { activity.StartActivity(intent, activityOptions.ToBundle()); } else { activity.StartActivity(intent); } }
protected override void ShowActivity(Type view, MvxActivityPresentationAttribute attribute, MvxViewModelRequest request) { var intent = CreateIntentForRequest(request); if (attribute.Extras != null) { intent.PutExtras(attribute.Extras); } var activity = CurrentActivity; if (activity == null) { MvxTrace.Warning("Cannot Resolve current top activity"); return; } if (attribute.SharedElements != null) { IList <Pair> sharedElements = new List <Pair>(); foreach (var item in attribute.SharedElements) { intent.PutExtra(item.Key, ViewCompat.GetTransitionName(item.Value)); sharedElements.Add(Pair.Create(item.Value, item.Key)); } ActivityOptionsCompat options = ActivityOptionsCompat.MakeSceneTransitionAnimation(CurrentActivity, sharedElements.ToArray()); activity.StartActivity(intent, options.ToBundle()); } else { activity.StartActivity(intent); } }
protected virtual void ShowActivity( Type view, MvxActivityPresentationAttribute attribute, MvxViewModelRequest request) { var intent = CreateIntentForRequest(request); if (attribute.Extras != null) { intent.PutExtras(attribute.Extras); } ShowIntent(intent); }
protected virtual Task <bool> ShowActivity( Type view, MvxActivityPresentationAttribute attribute, MvxViewModelRequest request) { var intent = CreateIntentForRequest(request); if (attribute.Extras != null) { intent.PutExtras(attribute.Extras); } ShowIntent(intent, CreateActivityTransitionOptions(intent, attribute, request)); return(Task.FromResult(true)); }
protected override bool CloseActivity(IMvxViewModel viewModel, MvxActivityPresentationAttribute attribute) { var currentView = CurrentActivity as IMvxView; if (currentView == null || currentView.ViewModel != viewModel) { var currentTopActivity = Mvx.Resolve <IMvxAndroidCurrentTopActivity>() as QueryableMvxLifecycleMonitorCurrentTopActivity; var closingActivity = currentTopActivity?.FindActivityByViewModel(viewModel); closingActivity?.Finish(); if (closingActivity != null) { //found an activity and handled it return(true); } } return(base.CloseActivity(viewModel, attribute)); }
protected virtual Bundle CreateActivityTransitionOptions(Intent intent, MvxActivityPresentationAttribute attribute, MvxViewModelRequest request) { var bundle = Bundle.Empty; if (CurrentActivity is IMvxAndroidSharedElements sharedElementsActivity) { var elements = new List <string>(); var transitionElementPairs = new List <Pair>(); foreach (KeyValuePair <string, View> item in sharedElementsActivity.FetchSharedElementsToAnimate(attribute, request)) { var transitionName = item.Value.GetTransitionNameSupport(); if (!string.IsNullOrEmpty(transitionName)) { transitionElementPairs.Add(Pair.Create(item.Value, transitionName)); elements.Add($"{item.Key}:{transitionName}"); } else { MvxLog.Instance.Warn("A XML transitionName is required in order to transition a control when navigating."); } } if (!transitionElementPairs.Any()) { MvxLog.Instance.Warn("No transition elements are provided"); return(bundle); } if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) { var activityOptions = ActivityOptions.MakeSceneTransitionAnimation(CurrentActivity, transitionElementPairs.ToArray()); intent.PutExtra(SharedElementsBundleKey, string.Join("|", elements)); bundle = activityOptions.ToBundle(); } else { MvxLog.Instance.Warn("Shared element transition requires Android v21+."); } } return(bundle); }
protected virtual bool CloseActivity(IMvxViewModel viewModel, MvxActivityPresentationAttribute attribute) { var currentView = CurrentActivity as IMvxView; if (currentView == null) { Mvx.Warning("Ignoring close for viewmodel - rootframe has no current page"); return(false); } if (currentView.ViewModel != viewModel) { Mvx.Warning("Ignoring close for viewmodel - rootframe's current page is not the view for the requested viewmodel"); return(false); } CurrentActivity.Finish(); return(true); }
protected virtual Task <bool> CloseActivity(IMvxViewModel viewModel, MvxActivityPresentationAttribute attribute) { var currentView = CurrentActivity as IMvxView; if (currentView == null) { MvxLog.Instance.Warn("Ignoring close for viewmodel - rootframe has no current page"); return(Task.FromResult(false)); } if (currentView.ViewModel != viewModel) { MvxLog.Instance.Warn("Ignoring close for viewmodel - rootframe's current page is not the view for the requested viewmodel"); return(Task.FromResult(false)); } CurrentActivity.Finish(); return(Task.FromResult(true)); }
public override ValueTask<MvxBasePresentationAttribute?> CreatePresentationAttribute(Type? viewModelType, Type? viewType) { if (viewType?.IsSubclassOf(typeof(DialogFragment)) ?? false) { MvxLog.Instance.Trace("PresentationAttribute not found for {0}. Assuming DialogFragment presentation", viewType.Name); var attribute = new MvxDialogFragmentPresentationAttribute() { ViewType = viewType, ViewModelType = viewModelType }; return new ValueTask<MvxBasePresentationAttribute?>(attribute); } else if (viewType?.IsSubclassOf(typeof(Fragment)) ?? false) { MvxLog.Instance.Trace("PresentationAttribute not found for {0}. Assuming Fragment presentation", viewType.Name); var attribute= new MvxFragmentPresentationAttribute(GetCurrentActivityViewModelType(), global::Android.Resource.Id.Content) { ViewType = viewType, ViewModelType = viewModelType }; return new ValueTask<MvxBasePresentationAttribute?>(attribute); } else if (viewType?.IsSubclassOf(typeof(Activity)) ?? false) { MvxLog.Instance.Trace("PresentationAttribute not found for {0}. Assuming Activity presentation", viewType.Name); var attribute = new MvxActivityPresentationAttribute() { ViewType = viewType, ViewModelType = viewModelType }; return new ValueTask<MvxBasePresentationAttribute?>(attribute); } return new ValueTask<MvxBasePresentationAttribute?>((MvxBasePresentationAttribute?)null); }
protected virtual Bundle CreateActivityTransitionOptions( Intent intent, MvxActivityPresentationAttribute attribute, MvxViewModelRequest request) { ValidateArguments(attribute, request); if (intent == null) { throw new ArgumentNullException(nameof(intent)); } var bundle = Bundle.Empty !; if (CurrentActivity.IsActivityAlive() && CurrentActivity is IMvxAndroidSharedElements sharedElementsActivity) { var(elements, transitionElementPairs) = GetTransitionElements(attribute, request, sharedElementsActivity); if (transitionElementPairs.Count == 0) { _logger.Value?.Log(LogLevel.Warning, "No transition elements are provided"); return(bundle); } var transitionElementsBundle = CreateTransitionElementsBundle(intent, transitionElementPairs, elements); if (transitionElementsBundle != null) { return(transitionElementsBundle); } } else { _logger.Value?.Log(LogLevel.Warning, "Shared element transition requires Android v21+."); } return(bundle); }
protected virtual ActivityOptionsCompat CreateActivityTransitionOptions(Android.Content.Intent intent, MvxActivityPresentationAttribute attribute) { ActivityOptionsCompat options = null; if (attribute.SharedElements != null) { IList <Pair> sharedElements = new List <Pair>(); foreach (var item in attribute.SharedElements) { intent.PutExtra(item.Key, ViewCompat.GetTransitionName(item.Value)); sharedElements.Add(Pair.Create(item.Value, item.Key)); } options = ActivityOptionsCompat.MakeSceneTransitionAnimation(CurrentActivity, sharedElements.ToArray()); } return(options); }
protected override bool CloseActivity(IMvxViewModel viewModel, MvxActivityPresentationAttribute attribute) { return(base.CloseActivity(viewModel, attribute)); }
protected override void ShowActivity(Type view, MvxActivityPresentationAttribute attribute, MvxViewModelRequest request) { base.ShowActivity(view, attribute, request); }