• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5  * except in compliance with the License. You may obtain a copy of the License at
6  *
7  *      http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software distributed under the
10  * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
11  * KIND, either express or implied. See the License for the specific language governing
12  * permissions and limitations under the License.
13  */
14 
15 package com.android.experimental.slicesapp;
16 
17 import android.app.Activity;
18 import android.content.ContentResolver;
19 import android.content.Intent;
20 import android.content.SharedPreferences;
21 import android.content.pm.ApplicationInfo;
22 import android.net.Uri;
23 import android.os.Bundle;
24 import android.view.View;
25 import android.view.ViewGroup;
26 import android.widget.AdapterView;
27 import android.widget.AdapterView.OnItemSelectedListener;
28 import android.widget.ArrayAdapter;
29 import android.widget.CheckBox;
30 import android.widget.Spinner;
31 import android.widget.TextView;
32 import java.util.ArrayList;
33 import java.util.List;
34 
35 public class SlicesActivity extends Activity {
36 
37     private static final String TAG = "SlicesActivity";
38 
39     private int mState;
40     private ViewGroup mSlicePreviewFrame;
41 
42     @Override
onCreate(Bundle savedInstanceState)43     public void onCreate(Bundle savedInstanceState) {
44         super.onCreate(savedInstanceState);
45         SharedPreferences state = getSharedPreferences("slice", 0);
46         mState = 0;
47         if (state != null) {
48             mState = Integer.parseInt(state.getString(getUri().toString(), "0"));
49         }
50         setContentView(R.layout.activity_layout);
51         mSlicePreviewFrame = (ViewGroup) findViewById(R.id.slice_preview);
52         findViewById(R.id.subtract).setOnClickListener(v -> {
53             mState--;
54             state.edit().putString(getUri().toString(), String.valueOf(mState)).commit();
55             updateState();
56             getContentResolver().notifyChange(getUri(), null);
57         });
58         findViewById(R.id.add).setOnClickListener(v -> {
59             mState++;
60             state.edit().putString(getUri().toString(), String.valueOf(mState)).commit();
61             updateState();
62             getContentResolver().notifyChange(getUri(), null);
63         });
64         findViewById(R.id.auth).setOnClickListener(v -> {
65             List<ApplicationInfo> packages = getPackageManager().getInstalledApplications(0);
66             packages.forEach(info -> grantUriPermission(info.packageName, getUri(),
67                     Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
68                             | Intent.FLAG_GRANT_WRITE_URI_PERMISSION));
69         });
70 
71         Spinner spinner = findViewById(R.id.spinner);
72         List<String> list = new ArrayList<>();
73         list.add("Default");
74         list.add("Single-line");
75         list.add("Single-line action");
76         list.add("Two-line");
77         list.add("Two-line action");
78         list.add("Weather");
79         list.add("Messaging");
80         list.add("Keep actions");
81         list.add("Maps multi");
82         list.add("Settings");
83         list.add("Settings content");
84         ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
85                 android.R.layout.simple_spinner_item, list);
86         adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
87         spinner.setAdapter(adapter);
88         spinner.setSelection(list.indexOf(state.getString("slice_type", "Default")));
89         spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
90             @Override
91             public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
92                 state.edit().putString("slice_type", list.get(position)).commit();
93                 getContentResolver().notifyChange(getUri(), null);
94                 updateSlice(getUri());
95             }
96 
97             @Override
98             public void onNothingSelected(AdapterView<?> parent) {
99             }
100         });
101 
102         bindCheckbox(R.id.header, state, "show_header");
103         bindCheckbox(R.id.sub_header, state, "show_sub_header");
104         bindCheckbox(R.id.show_action_row, state, "show_action_row");
105 
106         updateState();
107     }
108 
bindCheckbox(int id, SharedPreferences state, String key)109     private void bindCheckbox(int id, SharedPreferences state, String key) {
110         CheckBox checkbox = findViewById(id);
111         checkbox.setChecked(state.getBoolean(key, false));
112         checkbox.setOnCheckedChangeListener((v, isChecked) -> {
113             state.edit().putBoolean(key, isChecked).commit();
114             getContentResolver().notifyChange(getUri(), null);
115             updateSlice(getUri());
116         });
117     }
118 
updateState()119     private void updateState() {
120         ((TextView) findViewById(R.id.summary)).setText(String.valueOf(mState));
121     }
122 
getUri()123     public Uri getUri() {
124         return new Uri.Builder()
125                 .scheme(ContentResolver.SCHEME_CONTENT)
126                 .authority(getPackageName())
127                 .appendPath("main").build();
128     }
129 
updateSlice(Uri uri)130     private void updateSlice(Uri uri) {
131     }
132 }
133