Home | History | Annotate | Download | only in terms
      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 android.graphics.Color;
     22 import android.os.Bundle;
     23 import android.support.annotation.VisibleForTesting;
     24 import android.util.ArraySet;
     25 import android.view.ContextMenu;
     26 import android.view.View;
     27 import android.widget.ExpandableListView;
     28 import android.widget.TextView;
     29 import android.widget.Toolbar;
     30 
     31 import com.android.managedprovisioning.R;
     32 import com.android.managedprovisioning.analytics.ProvisioningAnalyticsTracker;
     33 import com.android.managedprovisioning.common.ClickableSpanFactory;
     34 import com.android.managedprovisioning.common.AccessibilityContextMenuMaker;
     35 import com.android.managedprovisioning.common.HtmlToSpannedParser;
     36 import com.android.managedprovisioning.common.SetupLayoutActivity;
     37 import com.android.managedprovisioning.common.StoreUtils;
     38 import com.android.managedprovisioning.common.Utils;
     39 import com.android.managedprovisioning.model.ProvisioningParams;
     40 import com.android.managedprovisioning.preprovisioning.WebActivity;
     41 
     42 import java.util.List;
     43 import java.util.Set;
     44 
     45 /**
     46  * Activity responsible for displaying the Terms screen
     47  */
     48 public class TermsActivity extends SetupLayoutActivity {
     49     private final TermsProvider mTermsProvider;
     50     private final AccessibilityContextMenuMaker mContextMenuMaker;
     51     private final ProvisioningAnalyticsTracker mProvisioningAnalyticsTracker;
     52     private final Set<Integer> mExpandedGroupsPosition = new ArraySet<>();
     53 
     54     @SuppressWarnings("unused")
     55     public TermsActivity() {
     56         this(StoreUtils::readString, null);
     57     }
     58 
     59     @VisibleForTesting TermsActivity(StoreUtils.TextFileReader textFileReader,
     60             AccessibilityContextMenuMaker contextMenuMaker) {
     61         super(new Utils());
     62         mTermsProvider = new TermsProvider(this, textFileReader, mUtils);
     63         mProvisioningAnalyticsTracker = ProvisioningAnalyticsTracker.getInstance();
     64         mContextMenuMaker =
     65                 contextMenuMaker != null ? contextMenuMaker : new AccessibilityContextMenuMaker(
     66                         this);
     67     }
     68 
     69     @Override
     70     protected void onCreate(Bundle savedInstanceState) {
     71         super.onCreate(savedInstanceState);
     72         setContentView(R.layout.terms_screen);
     73         setTitle(R.string.terms);
     74         setMainColor(Color.BLACK);
     75 
     76         ProvisioningParams params = checkNotNull(
     77                 getIntent().getParcelableExtra(ProvisioningParams.EXTRA_PROVISIONING_PARAMS));
     78         List<TermsDocument> terms = mTermsProvider.getTerms(params, 0);
     79 
     80         ExpandableListView container = (ExpandableListView) findViewById(R.id.terms_container);
     81         container.setAdapter(
     82                 new TermsListAdapter(terms,
     83                         getLayoutInflater(),
     84                         new AccessibilityContextMenuMaker(this),
     85                         new HtmlToSpannedParser(
     86                                 new ClickableSpanFactory(getColor(R.color.blue)),
     87                                 url -> WebActivity.createIntent(this, url,
     88                                         this.getWindow().getStatusBarColor())),
     89                         container::isGroupExpanded));
     90         container.expandGroup(0); // expand the 'General' section
     91 
     92         // Add default open terms to the expanded groups set.
     93         for (int i = 0; i < terms.size(); i++) {
     94             if (container.isGroupExpanded(i)) mExpandedGroupsPosition.add(i);
     95         }
     96 
     97         // keep at most one group expanded at a time
     98         container.setOnGroupExpandListener((int groupPosition) -> {
     99             mExpandedGroupsPosition.add(groupPosition);
    100             for (int i = 0; i < terms.size(); i++) {
    101                 if (i != groupPosition && container.isGroupExpanded(i)) {
    102                     container.collapseGroup(i);
    103                 }
    104             }
    105         });
    106 
    107         Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    108         toolbar.setNavigationOnClickListener(v -> TermsActivity.this.finish());
    109 
    110         mProvisioningAnalyticsTracker.logNumberOfTermsDisplayed(this, terms.size());
    111     }
    112 
    113     @Override
    114     public void onCreateContextMenu(ContextMenu menu, View v,
    115             ContextMenu.ContextMenuInfo menuInfo) {
    116         super.onCreateContextMenu(menu, v, menuInfo);
    117         if (v instanceof TextView) {
    118             mContextMenuMaker.populateMenuContent(menu, (TextView) v);
    119         }
    120     }
    121 
    122     @Override
    123     public void onDestroy() {
    124         mProvisioningAnalyticsTracker.logNumberOfTermsRead(this, mExpandedGroupsPosition.size());
    125         super.onDestroy();
    126     }
    127 
    128     @Override
    129     protected int getMetricsCategory() {
    130         return PROVISIONING_TERMS_ACTIVITY_TIME_MS;
    131     }
    132 }