/* * Copyright 2012 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package de.dennisguse.opentracks; import android.os.Bundle; import android.view.View; import androidx.activity.EdgeToEdge; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.ViewGroupCompat; import androidx.core.view.WindowInsetsCompat; import de.dennisguse.opentracks.services.announcement.TTSManager; import de.dennisguse.opentracks.settings.PreferencesUtils; /** * @author Jimmy Shih */ public abstract class AbstractActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { PreferencesUtils.applyTheme(this); EdgeToEdge.enable(this); super.onCreate(savedInstanceState); // Set volume control stream for text to speech setVolumeControlStream(TTSManager.AUDIO_STREAM); View rootView = createRootView(); setContentView(rootView); edge2edgeApplyInsets(rootView); } private void edge2edgeApplyInsets(View rootView) { ViewCompat.setOnApplyWindowInsetsListener(rootView, (view, windowInsets) -> { Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout() | WindowInsetsCompat.Type.ime()); view.setPadding(insets.left, insets.top, insets.right, insets.bottom); return WindowInsetsCompat.CONSUMED; }); // For Android 10 and below. ViewGroupCompat.installCompatInsetsDispatch(rootView); } @Override public boolean onSupportNavigateUp() { getOnBackPressedDispatcher().onBackPressed(); return true; } @NonNull protected abstract View createRootView(); }