• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2016, The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.managedprovisioning.preprovisioning.terms;
17 
18 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.PROVISIONING_TERMS_ACTIVITY_TIME_MS;
19 import static com.android.internal.util.Preconditions.checkNotNull;
20 
21 import static java.util.Objects.requireNonNull;
22 
23 import android.content.Context;
24 import android.content.Intent;
25 import android.os.Bundle;
26 import android.view.ContextMenu;
27 import android.view.MenuItem;
28 import android.view.View;
29 import android.widget.TextView;
30 
31 import androidx.annotation.VisibleForTesting;
32 import androidx.appcompat.app.AppCompatActivity;
33 import androidx.lifecycle.ViewModelProvider;
34 
35 import com.android.managedprovisioning.analytics.MetricsWriterFactory;
36 import com.android.managedprovisioning.analytics.ProvisioningAnalyticsTracker;
37 import com.android.managedprovisioning.common.AccessibilityContextMenuMaker;
38 import com.android.managedprovisioning.common.ManagedProvisioningSharedPreferences;
39 import com.android.managedprovisioning.common.SettingsFacade;
40 import com.android.managedprovisioning.common.SetupGlifLayoutActivity;
41 import com.android.managedprovisioning.common.StylerHelper;
42 import com.android.managedprovisioning.common.ThemeHelper;
43 import com.android.managedprovisioning.common.ThemeHelper.DefaultNightModeChecker;
44 import com.android.managedprovisioning.common.ThemeHelper.DefaultSetupWizardBridge;
45 import com.android.managedprovisioning.common.Utils;
46 import com.android.managedprovisioning.model.ProvisioningParams;
47 import com.android.managedprovisioning.preprovisioning.terms.TermsViewModel.TermsViewModelFactory;
48 import com.android.managedprovisioning.preprovisioning.terms.adapters.TermsListAdapter;
49 
50 import java.util.function.BiFunction;
51 
52 /**
53  * Activity responsible for displaying the Terms screen
54  */
55 public class TermsActivity extends SetupGlifLayoutActivity implements
56         TermsListAdapter.TermsBridge {
57     private final AccessibilityContextMenuMaker mContextMenuMaker;
58     private final SettingsFacade mSettingsFacade;
59     private ProvisioningAnalyticsTracker mProvisioningAnalyticsTracker;
60     private final BiFunction<AppCompatActivity, ProvisioningParams, TermsViewModel>
61             mViewModelFetcher;
62     private TermsViewModel mViewModel;
63     private final StylerHelper mStylerHelper;
64 
65     private TermsActivityBridge mBridge;
66 
67     @SuppressWarnings("unused")
TermsActivity()68     public TermsActivity() {
69         this(
70                 /* contextMenuMaker= */ null,
71                 new SettingsFacade(),
72                 new StylerHelper(),
73                 (activity, params) -> {
74                     final TermsViewModelFactory factory =
75                             new TermsViewModelFactory(activity.getApplication(), params);
76                     return new ViewModelProvider(activity, factory).get(TermsViewModel.class);
77                 });
78     }
79 
80     @VisibleForTesting
TermsActivity(AccessibilityContextMenuMaker contextMenuMaker, SettingsFacade settingsFacade, StylerHelper stylerHelper, BiFunction<AppCompatActivity, ProvisioningParams, TermsViewModel> viewModelFetcher)81     TermsActivity(AccessibilityContextMenuMaker contextMenuMaker, SettingsFacade settingsFacade,
82             StylerHelper stylerHelper,
83             BiFunction<AppCompatActivity, ProvisioningParams, TermsViewModel> viewModelFetcher) {
84         super(new Utils(), settingsFacade,
85                 new ThemeHelper(new DefaultNightModeChecker(), new DefaultSetupWizardBridge()));
86 
87         mContextMenuMaker =
88                 contextMenuMaker != null ? contextMenuMaker : new AccessibilityContextMenuMaker(
89                         this);
90         mSettingsFacade = requireNonNull(settingsFacade);
91         mViewModelFetcher = requireNonNull(viewModelFetcher);
92         mStylerHelper = requireNonNull(stylerHelper);
93     }
94 
95     @Override
onCreate(Bundle savedInstanceState)96     protected void onCreate(Bundle savedInstanceState) {
97         super.onCreate(savedInstanceState);
98 
99         ProvisioningParams params = checkNotNull(
100                 getIntent().getParcelableExtra(ProvisioningParams.EXTRA_PROVISIONING_PARAMS));
101         mViewModel = mViewModelFetcher.apply(this, params);
102 
103         mBridge = createBridge();
104         mBridge.initiateUi(this, mViewModel.getTerms(), mViewModel.getGeneralDisclaimer());
105 
106         initAnalyticsTracker();
107     }
108 
initAnalyticsTracker()109     private void initAnalyticsTracker() {
110         mProvisioningAnalyticsTracker = new ProvisioningAnalyticsTracker(
111                 MetricsWriterFactory.getMetricsWriter(this, mSettingsFacade),
112                 new ManagedProvisioningSharedPreferences(getApplicationContext()));
113         mProvisioningAnalyticsTracker.logNumberOfTermsDisplayed(this, mViewModel.getTerms().size());
114     }
115 
createBridge()116     protected TermsActivityBridge createBridge() {
117         return TermsActivityBridgeImpl.builder()
118                 .setUtils(mUtils)
119                 .setStylerHelper(mStylerHelper)
120                 .setTransitionHelper(getTransitionHelper())
121                 .build();
122     }
123 
124     @Override
onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)125     public void onCreateContextMenu(ContextMenu menu, View v,
126             ContextMenu.ContextMenuInfo menuInfo) {
127         super.onCreateContextMenu(menu, v, menuInfo);
128         if (v instanceof TextView) {
129             mContextMenuMaker.populateMenuContent(menu, (TextView) v);
130         }
131     }
132 
133     @Override
onOptionsItemSelected(MenuItem item)134     public boolean onOptionsItemSelected(MenuItem item) {
135         if (item.getItemId() == android.R.id.home) {
136             onBackPressed();
137             return true;
138         }
139         return super.onOptionsItemSelected(item);
140     }
141 
142     @Override
onDestroy()143     public void onDestroy() {
144         mProvisioningAnalyticsTracker.logNumberOfTermsRead(
145                 this, mViewModel.getNumberOfReadTerms());
146         super.onDestroy();
147     }
148 
149     @Override
getMetricsCategory()150     protected int getMetricsCategory() {
151         return PROVISIONING_TERMS_ACTIVITY_TIME_MS;
152     }
153 
154     @Override
isTermExpanded(int groupPosition)155     public boolean isTermExpanded(int groupPosition) {
156         return mViewModel.isTermExpanded(groupPosition);
157     }
158 
159     @Override
onTermExpanded(int groupPosition, boolean expanded)160     public void onTermExpanded(int groupPosition, boolean expanded) {
161         mViewModel.setTermExpanded(groupPosition, expanded);
162     }
163 
164     @Override
onLinkClicked(Intent intent)165     public void onLinkClicked(Intent intent) {
166         getTransitionHelper().startActivityWithTransition(this, intent);
167     }
168 
169     @Override
shouldSetupDynamicColors()170     protected boolean shouldSetupDynamicColors() {
171         Context context = getApplicationContext();
172         return !mSettingsFacade.isDeferredSetup(context)
173                 && !mSettingsFacade.isDuringSetupWizard(context);
174     }
175 }
176