• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2020 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 
17 package com.android.car.settings.common;
18 
19 import android.annotation.Nullable;
20 import android.content.Intent;
21 import android.net.Uri;
22 import android.os.Bundle;
23 import android.os.UserHandle;
24 import android.provider.Settings;
25 import android.text.TextUtils;
26 
27 import androidx.fragment.app.Fragment;
28 
29 import com.android.car.settings.R;
30 import com.android.car.settings.accessibility.AccessibilitySettingsFragment;
31 import com.android.car.settings.accessibility.CaptionsSettingsFragment;
32 import com.android.car.settings.accounts.ChooseAccountFragment;
33 import com.android.car.settings.applications.ApplicationDetailsFragment;
34 import com.android.car.settings.applications.ApplicationsSettingsFragment;
35 import com.android.car.settings.applications.AppsFragment;
36 import com.android.car.settings.applications.assist.AssistantAndVoiceFragment;
37 import com.android.car.settings.applications.defaultapps.DefaultAutofillPickerFragment;
38 import com.android.car.settings.applications.specialaccess.ModifySystemSettingsFragment;
39 import com.android.car.settings.applications.specialaccess.NotificationAccessFragment;
40 import com.android.car.settings.applications.specialaccess.PremiumSmsAccessFragment;
41 import com.android.car.settings.applications.specialaccess.SpecialAccessSettingsFragment;
42 import com.android.car.settings.applications.specialaccess.UsageAccessFragment;
43 import com.android.car.settings.applications.specialaccess.WifiControlFragment;
44 import com.android.car.settings.bluetooth.BluetoothSettingsFragment;
45 import com.android.car.settings.datetime.DatetimeSettingsFragment;
46 import com.android.car.settings.display.DisplaySettingsFragment;
47 import com.android.car.settings.inputmethod.KeyboardFragment;
48 import com.android.car.settings.language.LanguagePickerFragment;
49 import com.android.car.settings.language.LanguagesAndInputFragment;
50 import com.android.car.settings.location.LocationSettingsFragment;
51 import com.android.car.settings.network.MobileNetworkFragment;
52 import com.android.car.settings.network.MobileNetworkListFragment;
53 import com.android.car.settings.network.NetworkAndInternetFragment;
54 import com.android.car.settings.notifications.NotificationsFragment;
55 import com.android.car.settings.privacy.PrivacySettingsFragment;
56 import com.android.car.settings.privacy.VehicleDataFragment;
57 import com.android.car.settings.profiles.ProfileDetailsFragment;
58 import com.android.car.settings.security.SecuritySettingsFragment;
59 import com.android.car.settings.sound.RingtonePickerFragment;
60 import com.android.car.settings.sound.SoundSettingsFragment;
61 import com.android.car.settings.storage.StorageSettingsFragment;
62 import com.android.car.settings.system.AboutSettingsFragment;
63 import com.android.car.settings.system.LegalInformationFragment;
64 import com.android.car.settings.system.ResetOptionsFragment;
65 import com.android.car.settings.system.SystemSettingsFragment;
66 import com.android.car.settings.tts.TextToSpeechOutputFragment;
67 import com.android.car.settings.units.UnitsSettingsFragment;
68 import com.android.car.settings.wifi.AddWifiFragment;
69 import com.android.car.settings.wifi.WifiSettingsFragment;
70 import com.android.car.settings.wifi.WifiTetherFragment;
71 import com.android.car.settings.wifi.preferences.WifiPreferencesFragment;
72 
73 /**
74  * Top level settings class, containing static instances of CarSettings activities.
75  */
76 public class CarSettingActivities {
77 
78     private static final Logger LOG = new Logger(CarSettingActivities.class);
79 
80     /**
81      * Homepage Activity.
82      */
83     public static class HomepageActivity extends BaseCarSettingsActivity {
84         @Nullable
85         @Override
getInitialFragment()86         protected Fragment getInitialFragment() {
87             try {
88                 return getSupportFragmentManager().getFragmentFactory().instantiate(
89                         getClassLoader(), getString(R.string.config_homepage_fragment_class));
90             } catch (Fragment.InstantiationException e) {
91                 LOG.e("Unable to instantiate homepage fragment", e);
92                 return null;
93             }
94         }
95 
96         @Override
shouldFocusContentOnLaunch()97         protected boolean shouldFocusContentOnLaunch() {
98             // Focus should stay with the top-level menu for the HomepageActivity.
99             return false;
100         }
101     }
102 
103     // Homepage sub-sections
104 
105     /**
106      * Display Settings Activity.
107      */
108     public static class DisplaySettingsActivity extends BaseCarSettingsActivity {
109         @Nullable
110         @Override
getInitialFragment()111         protected Fragment getInitialFragment() {
112             return new DisplaySettingsFragment();
113         }
114     }
115 
116     /**
117      * Sound Settings Activity.
118      */
119     public static class SoundSettingsActivity extends BaseCarSettingsActivity {
120         @Nullable
121         @Override
getInitialFragment()122         protected Fragment getInitialFragment() {
123             return new SoundSettingsFragment();
124         }
125     }
126 
127     /**
128      * Ringtone Picker Activity.
129      */
130     public static class RingtonePickerActivity extends BaseCarSettingsActivity {
131         @Nullable
132         @Override
getInitialFragment()133         protected Fragment getInitialFragment() {
134             Bundle args = getIntent().getExtras().deepCopy();
135             Fragment fragment = new RingtonePickerFragment();
136             fragment.setArguments(args);
137             return fragment;
138         }
139     }
140 
141     /**
142      * Network and Internet Activity.
143      */
144     public static class NetworkAndInternetActivity extends BaseCarSettingsActivity {
145         @Nullable
146         @Override
getInitialFragment()147         protected Fragment getInitialFragment() {
148             return new NetworkAndInternetFragment();
149         }
150     }
151 
152     /**
153      * Bluetooth Settings Activity.
154      */
155     public static class BluetoothSettingsActivity extends BaseCarSettingsActivity {
156         @Nullable
157         @Override
getInitialFragment()158         protected Fragment getInitialFragment() {
159             return new BluetoothSettingsFragment();
160         }
161     }
162 
163     /**
164      * Units Settings Activity.
165      */
166     public static class UnitsSettingsActivity extends BaseCarSettingsActivity {
167         @Nullable
168         @Override
getInitialFragment()169         protected Fragment getInitialFragment() {
170             return new UnitsSettingsFragment();
171         }
172     }
173 
174     /**
175      * Location Settings Activity.
176      */
177     public static class LocationSettingsActivity extends BaseCarSettingsActivity {
178         @Nullable
179         @Override
getInitialFragment()180         protected Fragment getInitialFragment() {
181             return new LocationSettingsFragment();
182         }
183     }
184 
185     /**
186      * Apps Activity.
187      */
188     public static class AppsActivity extends BaseCarSettingsActivity {
189         @Nullable
190         @Override
getInitialFragment()191         protected Fragment getInitialFragment() {
192             return new AppsFragment();
193         }
194     }
195 
196     /**
197      * Notifications Activity.
198      */
199     public static class NotificationsActivity extends BaseCarSettingsActivity {
200         @Nullable
201         @Override
getInitialFragment()202         protected Fragment getInitialFragment() {
203             return new NotificationsFragment();
204         }
205     }
206 
207     /**
208      * Datetime Settings Activity.
209      */
210     public static class DatetimeSettingsActivity extends BaseCarSettingsActivity {
211         @Nullable
212         @Override
getInitialFragment()213         protected Fragment getInitialFragment() {
214             return new DatetimeSettingsFragment();
215         }
216     }
217 
218     /**
219      * Profile Details Activity.
220      */
221     public static class ProfileDetailsActivity extends BaseCarSettingsActivity {
222         @Nullable
223         @Override
getInitialFragment()224         protected Fragment getInitialFragment() {
225             return ProfileDetailsFragment.newInstance(UserHandle.myUserId());
226         }
227     }
228 
229     /**
230      * Privacy Settings Activity.
231      */
232     public static class PrivacySettingsActivity extends BaseCarSettingsActivity {
233         @Nullable
234         @Override
getInitialFragment()235         protected Fragment getInitialFragment() {
236             return new PrivacySettingsFragment();
237         }
238     }
239 
240     /**
241      * Vehicle Data Activity.
242      */
243     public static class VehicleDataActivity extends BaseCarSettingsActivity {
244         @Nullable
245         @Override
getInitialFragment()246         protected Fragment getInitialFragment() {
247             return new VehicleDataFragment();
248         }
249     }
250 
251     /**
252      * Storage Settings Activity.
253      */
254     public static class StorageSettingsActivity extends BaseCarSettingsActivity {
255         @Nullable
256         @Override
getInitialFragment()257         protected Fragment getInitialFragment() {
258             return new StorageSettingsFragment();
259         }
260     }
261 
262     /**
263      * Security Settings Activity.
264      */
265     public static class SecuritySettingsActivity extends BaseCarSettingsActivity {
266         @Nullable
267         @Override
getInitialFragment()268         protected Fragment getInitialFragment() {
269             return new SecuritySettingsFragment();
270         }
271     }
272 
273     /**
274      * Assistant & voice Settings Activity.
275      */
276     public static class AssistantAndVoiceSettingsActivity extends BaseCarSettingsActivity {
277         @Nullable
278         @Override
getInitialFragment()279         protected Fragment getInitialFragment() {
280             return new AssistantAndVoiceFragment();
281         }
282     }
283 
284     /**
285      * System Settings Activity.
286      */
287     public static class SystemSettingsActivity extends BaseCarSettingsActivity {
288         @Nullable
289         @Override
getInitialFragment()290         protected Fragment getInitialFragment() {
291             return new SystemSettingsFragment();
292         }
293     }
294 
295     // Network & internet sub-sections
296 
297     /**
298      * Wifi Settings Activity.
299      */
300     public static class WifiSettingsActivity extends BaseCarSettingsActivity {
301         @Nullable
302         @Override
getInitialFragment()303         protected Fragment getInitialFragment() {
304             return new WifiSettingsFragment();
305         }
306     }
307 
308     /**
309      * Wifi Hotspot and Tethering Activity.
310      */
311     public static class WifiTetherActivity extends BaseCarSettingsActivity {
312         @Nullable
313         @Override
getInitialFragment()314         protected Fragment getInitialFragment() {
315             return new WifiTetherFragment();
316         }
317     }
318 
319     /**
320      * Mobile Network Activity.
321      */
322     public static class MobileNetworkActivity extends BaseCarSettingsActivity {
323         @Nullable
324         @Override
getInitialFragment()325         protected Fragment getInitialFragment() {
326             return MobileNetworkFragment.newInstance(
327                     getIntent().getIntExtra("network_sub_id", Integer.MIN_VALUE));
328         }
329     }
330 
331     /**
332      * Mobile Network List Activity.
333      */
334     public static class MobileNetworkListActivity extends BaseCarSettingsActivity {
335         @Nullable
336         @Override
getInitialFragment()337         protected Fragment getInitialFragment() {
338             return new MobileNetworkListFragment();
339         }
340     }
341 
342     // Apps & Notifications sub-sections
343 
344     /**
345      * Application Settings Activity.
346      */
347     public static class ApplicationsSettingsActivity extends BaseCarSettingsActivity {
348         @Nullable
349         @Override
getInitialFragment()350         protected Fragment getInitialFragment() {
351             return new ApplicationsSettingsFragment();
352         }
353     }
354 
355     /**
356      * Application Special Access Settings Activity.
357      */
358     public static class SpecialAccessSettingsActivity extends BaseCarSettingsActivity {
359         @Nullable
360         @Override
getInitialFragment()361         protected Fragment getInitialFragment() {
362             return new SpecialAccessSettingsFragment();
363         }
364     }
365 
366     // System sub-sections
367 
368     /**
369      * Languages and Input Activity.
370      */
371     public static class LanguagesAndInputActivity extends BaseCarSettingsActivity {
372         @Nullable
373         @Override
getInitialFragment()374         protected Fragment getInitialFragment() {
375             return new LanguagesAndInputFragment();
376         }
377     }
378 
379     /**
380      * About Settings Activity.
381      */
382     public static class AboutSettingsActivity extends BaseCarSettingsActivity {
383         @Nullable
384         @Override
getInitialFragment()385         protected Fragment getInitialFragment() {
386             return new AboutSettingsFragment();
387         }
388     }
389 
390     /**
391      * Legal Information Activity.
392      */
393     public static class LegalInformationActivity extends BaseCarSettingsActivity {
394         @Nullable
395         @Override
getInitialFragment()396         protected Fragment getInitialFragment() {
397             return new LegalInformationFragment();
398         }
399     }
400 
401     /**
402      * Reset Options Activity.
403      */
404     public static class ResetOptionsActivity extends BaseCarSettingsActivity {
405         @Nullable
406         @Override
getInitialFragment()407         protected Fragment getInitialFragment() {
408             return new ResetOptionsFragment();
409         }
410     }
411 
412     // Wi-fi sub-sections
413 
414     /**
415      * Add Wifi Network Activity.
416      */
417     public static class AddWifiActivity extends BaseCarSettingsActivity {
418         @Nullable
419         @Override
getInitialFragment()420         protected Fragment getInitialFragment() {
421             return new AddWifiFragment();
422         }
423     }
424 
425     /**
426      * Wifi Preferences Activity.
427      */
428     public static class WifiPreferencesActivity extends BaseCarSettingsActivity {
429         @Nullable
430         @Override
getInitialFragment()431         protected Fragment getInitialFragment() {
432             return new WifiPreferencesFragment();
433         }
434     }
435 
436     // App Info sub-sections
437 
438     /**
439      * Application Details Activity.
440      * Intent required to include package string as Settings.EXTRA_APP_PACKAGE extra.
441      */
442     public static class ApplicationsDetailsActivity extends BaseCarSettingsActivity {
443         @Nullable
444         @Override
getInitialFragment()445         protected Fragment getInitialFragment() {
446             Intent intent = getIntent();
447             String pkg = intent.getStringExtra(Settings.EXTRA_APP_PACKAGE);
448             if (TextUtils.isEmpty(pkg)) {
449                 LOG.w("No package provided for application detailed intent");
450                 Uri uri = intent.getData();
451                 if (uri == null) {
452                     LOG.w("No uri provided for application detailed intent");
453                     return null;
454                 }
455                 pkg = uri.getSchemeSpecificPart();
456             }
457             return ApplicationDetailsFragment.getInstance(pkg);
458         }
459     }
460 
461     // Special app access sub-section
462 
463     /**
464      * App Modify System Settings Access Activity.
465      */
466     public static class ModifySystemSettingsActivity extends BaseCarSettingsActivity {
467         @Nullable
468         @Override
getInitialFragment()469         protected Fragment getInitialFragment() {
470             return new ModifySystemSettingsFragment();
471         }
472     }
473 
474     /**
475      * App Notification Access Activity.
476      */
477     public static class NotificationAccessActivity extends BaseCarSettingsActivity {
478         @Nullable
479         @Override
getInitialFragment()480         protected Fragment getInitialFragment() {
481             return new NotificationAccessFragment();
482         }
483     }
484 
485     /**
486      * App Premium SMS Access Activity.
487      */
488     public static class PremiumSmsAccessActivity extends BaseCarSettingsActivity {
489         @Nullable
490         @Override
getInitialFragment()491         protected Fragment getInitialFragment() {
492             return new PremiumSmsAccessFragment();
493         }
494     }
495 
496     /**
497      * App Usage Access Activity.
498      */
499     public static class UsageAccessActivity extends BaseCarSettingsActivity {
500         @Nullable
501         @Override
getInitialFragment()502         protected Fragment getInitialFragment() {
503             return new UsageAccessFragment();
504         }
505     }
506 
507     /**
508      * App Wifi Control Access Activity.
509      */
510     public static class WifiControlActivity extends BaseCarSettingsActivity {
511         @Nullable
512         @Override
getInitialFragment()513         protected Fragment getInitialFragment() {
514             return new WifiControlFragment();
515         }
516     }
517 
518     // Account sub-section
519 
520     /**
521      * Choose Account Activity.
522      */
523     public static class ChooseAccountActivity extends BaseCarSettingsActivity {
524         @Nullable
525         @Override
getInitialFragment()526         protected Fragment getInitialFragment() {
527             return new ChooseAccountFragment();
528         }
529     }
530 
531     // Languages & input sub-section
532 
533     /**
534      * Language Picker Activity.
535      */
536     public static class LanguagePickerActivity extends BaseCarSettingsActivity {
537         @Nullable
538         @Override
getInitialFragment()539         protected Fragment getInitialFragment() {
540             return new LanguagePickerFragment();
541         }
542     }
543 
544     /**
545      * Default Autofill Picker Activity.
546      */
547     public static class DefaultAutofillPickerActivity extends BaseCarSettingsActivity {
548         @Nullable
549         @Override
getInitialFragment()550         protected Fragment getInitialFragment() {
551             return new DefaultAutofillPickerFragment();
552         }
553     }
554 
555     /**
556      * Keyboard Activity.
557      */
558     public static class KeyboardActivity extends BaseCarSettingsActivity {
559         @Nullable
560         @Override
getInitialFragment()561         protected Fragment getInitialFragment() {
562             return new KeyboardFragment();
563         }
564     }
565 
566     /**
567      * Text to Speech Output Activity.
568      */
569     public static class TextToSpeechOutputActivity extends BaseCarSettingsActivity {
570         @Nullable
571         @Override
getInitialFragment()572         protected Fragment getInitialFragment() {
573             return new TextToSpeechOutputFragment();
574         }
575     }
576 
577     /**
578      * Accessibility Activity.
579      */
580     public static class AccessibilityActivity extends BaseCarSettingsActivity {
581         @Nullable
582         @Override
getInitialFragment()583         protected Fragment getInitialFragment() {
584             return new AccessibilitySettingsFragment();
585         }
586     }
587 
588     /**
589      * Captions Activity.
590      */
591     public static class CaptionsActivity extends BaseCarSettingsActivity {
592         @Nullable
593         @Override
getInitialFragment()594         protected Fragment getInitialFragment() {
595             return new CaptionsSettingsFragment();
596         }
597     }
598 
599 }
600