feat: rebase app themes to material themes

This commit is contained in:
proletarius101 2021-04-12 16:36:17 +00:00 committed by Hans-Christoph Steiner
parent 5af693265f
commit 755588202f
143 changed files with 1624 additions and 1445 deletions
app
build.gradle
src
basic/res/xml
full
main
AndroidManifest.xml
java/org/fdroid/fdroid
res
drawable-v21
drawable
layout-v21
layout
menu
transition
values-af
values-ar
values-ast
values-be
values-bg
values-bn-rBD
values-bn
values-bo
values-ca
values-cs
values-cy
values-da
values-de
values-el
values-en-rGB
values-eo
values-es-rAR
values-es-rMX
values-es
values-et
values-eu
values-fa
values-fi
values-fr
values-gl
values-he
values-hi
values-hr
values-hu
values-hy
values-id
values-is
values-it
values-ja
values-kab
values-kn
values-ko
values-lt
values-mk

@ -28,7 +28,7 @@ android {
versionName getVersionName()
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
minSdkVersion 14
minSdkVersion 22
//noinspection ExpiredTargetSdkVersion
targetSdkVersion 25
/*

@ -1,13 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceScreen android:title="@string/about_title">
<intent
android:action="android.intent.action.MAIN"
android:targetPackage="@string/applicationId"
android:targetClass="org.fdroid.fdroid.AboutActivity"/>
</PreferenceScreen>
<PreferenceScreen android:title="@string/about_title"
android:key="pref_about" />
<PreferenceCategory android:title="@string/preference_category__my_apps">
<PreferenceScreen android:title="@string/preference_manage_installed_apps">
@ -47,7 +42,7 @@
android:title="@string/over_data"
android:defaultValue="@integer/defaultOverData"
android:layout="@layout/preference_seekbar"/>
<SwitchPreference
<SwitchPreferenceCompat
android:title="@string/update_auto_download"
android:summary="@string/update_auto_download_summary"
android:key="updateAutoDownload"/>
@ -56,7 +51,7 @@
android:title="@string/update_interval"
android:defaultValue="@integer/defaultUpdateInterval"
android:layout="@layout/preference_seekbar"/>
<SwitchPreference
<SwitchPreferenceCompat
android:title="@string/notify"
android:defaultValue="true"
android:key="updateNotify"/>
@ -77,26 +72,26 @@
<PreferenceCategory android:title="@string/appcompatibility"
android:key="pref_category_appcompatibility">
<SwitchPreference
<SwitchPreferenceCompat
android:title="@string/show_incompat_versions"
android:defaultValue="false"
android:key="incompatibleVersions"/>
<SwitchPreference
<SwitchPreferenceCompat
android:title="@string/show_anti_feature_apps"
android:defaultValue="false"
android:key="showAntiFeatureApps"/>
<SwitchPreference
<SwitchPreferenceCompat
android:title="@string/force_touch_apps"
android:defaultValue="false"
android:key="ignoreTouchscreen"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/proxy">
<SwitchPreference
<SwitchPreferenceCompat
android:key="useTor"
android:summary="@string/useTorSummary"
android:title="@string/useTor"/>
<SwitchPreference
<SwitchPreferenceCompat
android:defaultValue="false"
android:key="enableProxy"
android:title="@string/enable_proxy_title"
@ -116,12 +111,12 @@
<PreferenceCategory
android:key="pref_category_privacy"
android:title="@string/privacy">
<SwitchPreference
<SwitchPreferenceCompat
android:key="promptToSendCrashReports"
android:title="@string/prompt_to_send_crash_reports"
android:summary="@string/prompt_to_send_crash_reports_summary"
android:defaultValue="true"/>
<SwitchPreference
<SwitchPreferenceCompat
android:defaultValue="false"
android:key="preventScreenshots"
android:summary="@string/preventScreenshots_summary"
@ -137,7 +132,7 @@
android:defaultValue="86400000"
android:entries="@array/keepCacheNames"
android:entryValues="@array/keepCacheValues"/>
<SwitchPreference
<SwitchPreferenceCompat
android:title="@string/expert"
android:defaultValue="false"
android:key="expert"/>

@ -56,7 +56,6 @@
android:name=".nearby.SwapWorkflowActivity"
android:parentActivityName=".views.main.MainActivity"
android:launchMode="singleTask"
android:theme="@style/SwapTheme.Wizard"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden">
<meta-data
@ -159,8 +158,7 @@
android:name=".panic.CalculatorActivity"
android:enabled="false"
android:icon="@mipmap/ic_calculator_launcher"
android:label="@string/hiding_calculator"
android:theme="@style/AppThemeLight">
android:label="@string/hiding_calculator">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>

@ -200,8 +200,6 @@ public class SelectAppsView extends SwapView implements LoaderManager.LoaderCall
}
});
}
updateCheckedIndicatorView(view, listView.isItemChecked(listPosition));
}
public void updateCheckedIndicatorView(int position, boolean checked) {
@ -210,24 +208,6 @@ public class SelectAppsView extends SwapView implements LoaderManager.LoaderCall
if (position >= firstListItemPosition && position <= lastListItemPosition) {
final int childIndex = position - firstListItemPosition;
updateCheckedIndicatorView(listView.getChildAt(childIndex), checked);
}
}
private void updateCheckedIndicatorView(View view, boolean checked) {
ImageView imageView = (ImageView) view.findViewById(R.id.checked);
if (imageView != null) {
int resource;
int colour;
if (checked) {
resource = R.drawable.ic_check_circle;
colour = ContextCompat.getColor(getContext(), R.color.swap_bright_blue);
} else {
resource = R.drawable.ic_add_circle_outline;
colour = 0xFFD0D0D4;
}
imageView.setImageDrawable(ContextCompat.getDrawable(getContext(), resource));
imageView.setColorFilter(colour, PorterDuff.Mode.MULTIPLY);
}
}
}

@ -42,10 +42,10 @@ import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SearchView;
import androidx.appcompat.widget.SwitchCompat;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.ContextCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import com.google.android.material.appbar.MaterialToolbar;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
@ -106,7 +106,7 @@ public class SwapWorkflowActivity extends AppCompatActivity {
private static final int REQUEST_WRITE_SETTINGS_PERMISSION = 5;
private static final int STEP_INTRO = 1; // TODO remove this special case, only use layoutResIds
private Toolbar toolbar;
private MaterialToolbar toolbar;
private SwapView currentView;
private boolean hasPreparedLocalRepo;
private boolean newIntent;
@ -200,7 +200,11 @@ public class SwapWorkflowActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
((FDroidApp) getApplication()).setSecureWindow(this);
FDroidApp fdroidApp = (FDroidApp) getApplication();
fdroidApp.setSecureWindow(this);
fdroidApp.applyPureBlackBackgroundInDarkTheme(this);
super.onCreate(savedInstanceState);
currentView = new SwapView(this); // dummy placeholder to avoid NullPointerExceptions;
@ -213,10 +217,8 @@ public class SwapWorkflowActivity extends AppCompatActivity {
setContentView(R.layout.swap_activity);
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitleTextAppearance(getApplicationContext(), R.style.SwapTheme_Wizard_Text_Toolbar);
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
container = (ViewGroup) findViewById(R.id.container);
@ -494,7 +496,6 @@ public class SwapWorkflowActivity extends AppCompatActivity {
currentView.setLayoutResId(viewRes);
currentSwapViewLayoutRes = viewRes;
toolbar.setBackgroundColor(currentView.getToolbarColour());
toolbar.setTitle(currentView.getToolbarTitle());
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override

@ -3,11 +3,14 @@ package org.fdroid.fdroid.panic;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.material.appbar.MaterialToolbar;
import org.fdroid.fdroid.FDroidApp;
import org.fdroid.fdroid.R;
import java.util.regex.Pattern;
@ -35,10 +38,13 @@ public class CalculatorActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
FDroidApp fdroidApp = (FDroidApp) getApplication();
fdroidApp.applyPureBlackBackgroundInDarkTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calculator);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
MaterialToolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
textView = (TextView) findViewById(R.id.textView);

@ -1,10 +1,12 @@
package org.fdroid.fdroid.panic;
import android.os.Bundle;
import androidx.appcompat.app.ActionBar;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.view.MenuItem;
import com.google.android.material.appbar.MaterialToolbar;
import org.fdroid.fdroid.FDroidApp;
import org.fdroid.fdroid.R;
@ -12,26 +14,19 @@ public class PanicPreferencesActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle bundle) {
((FDroidApp) getApplication()).applyTheme(this);
FDroidApp fdroidApp = (FDroidApp) getApplication();
fdroidApp.applyPureBlackBackgroundInDarkTheme(this);
super.onCreate(bundle);
setContentView(R.layout.activity_panic_settings);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar ab = getSupportActionBar();
if (ab != null) {
ab.setDisplayShowHomeEnabled(true);
ab.setDisplayHomeAsUpEnabled(true);
}
MaterialToolbar toolbar = findViewById(R.id.toolbar);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Handle navigation icon press
onBackPressed();
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
}

@ -29,14 +29,14 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.ContextCompat;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.CursorLoader;
import androidx.loader.content.Loader;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.appbar.MaterialToolbar;
import org.fdroid.fdroid.FDroidApp;
import org.fdroid.fdroid.Preferences;
import org.fdroid.fdroid.R;
@ -54,13 +54,14 @@ public class SelectInstalledAppsActivity extends AppCompatActivity implements Lo
@Override
protected void onCreate(Bundle savedInstanceState) {
FDroidApp fdroidApp = (FDroidApp) getApplication();
fdroidApp.applyPureBlackBackgroundInDarkTheme(this);
((FDroidApp) getApplication()).applyTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.installed_apps_layout);
Toolbar toolbar = findViewById(R.id.toolbar);
MaterialToolbar toolbar = findViewById(R.id.toolbar);
toolbar.setTitle(getString(R.string.panic_add_apps_to_uninstall));
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

@ -1,12 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal"
tools:ignore="VectorRaster">
<path
android:fillColor="#FFFFFF"
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM9.29,16.29L5.7,12.7c-0.39,-0.39 -0.39,-1.02 0,-1.41 0.39,-0.39 1.02,-0.39 1.41,0L10,14.17l6.88,-6.88c0.39,-0.39 1.02,-0.39 1.41,0 0.39,0.39 0.39,1.02 0,1.41l-7.59,7.59c-0.38,0.39 -1.02,0.39 -1.41,0z"/>
</vector>

@ -1,79 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2010 The Android Open Source Project
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.
-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/listPreferredItemHeight"
android:paddingBottom="2dip"
android:paddingTop="2dip">
<ImageView
android:id="@android:id/icon"
android:layout_width="48dip"
android:layout_height="48dip"
android:layout_marginLeft="?attr/listPreferredItemPaddingLeft"
android:layout_marginStart="?attr/listPreferredItemPaddingStart"
android:layout_marginTop="6dip"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
tools:src="@drawable/ic_launcher"
tools:ignore="ContentDescription" />
<!-- Suppress InconsistentLayout because the lower API levels use a checkbox rather than this -->
<ImageView
android:id="@+id/checked"
android:layout_width="32dip"
android:layout_height="32dip"
android:layout_marginRight="?attr/listPreferredItemPaddingLeft"
android:layout_marginEnd="?attr/listPreferredItemPaddingStart"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
tools:suppress="InconsistentLayout"
app:srcCompat="@drawable/ic_add_circle_outline" />
<TwoLineListItem
android:layout_toRightOf="@android:id/icon"
android:layout_toEndOf="@android:id/icon"
android:layout_toLeftOf="@id/checked"
android:layout_toStartOf="@id/checked"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:mode="twoLine" >
<TextView
android:id="@+id/application_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="?attr/listPreferredItemPaddingLeft"
android:layout_marginStart="?attr/listPreferredItemPaddingStart"
android:layout_marginTop="6dip"
android:textAppearance="?android:attr/textAppearanceMedium"
tools:text="F-Droid" />
<TextView
android:id="@+id/package_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/application_label"
android:layout_alignLeft="@+id/application_label"
android:layout_below="@+id/application_label"
android:textAppearance="?android:attr/textAppearanceSmall"
tools:text="Application Manager" />
</TwoLineListItem>
</RelativeLayout>

@ -1,71 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2010 The Android Open Source Project
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.
-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/listPreferredItemHeight"
android:paddingBottom="2dip"
android:paddingTop="2dip">
<ImageView
android:id="@android:id/icon"
android:layout_width="48dip"
android:layout_height="48dip"
android:layout_marginStart="?attr/listPreferredItemPaddingStart"
android:layout_marginTop="6dip"
android:layout_alignParentStart="true"
tools:src="@drawable/ic_launcher"
tools:ignore="ContentDescription" />
<!-- Suppress InconsistentLayout because the lower API levels use a checkbox rather than this -->
<ImageView
android:id="@+id/checked"
android:layout_width="32dip"
android:layout_height="32dip"
android:layout_marginEnd="?attr/listPreferredItemPaddingStart"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
tools:suppress="InconsistentLayout"
app:srcCompat="@drawable/ic_add_circle_outline" />
<TwoLineListItem
android:layout_toEndOf="@android:id/icon"
android:layout_toStartOf="@id/checked"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:mode="twoLine" >
<TextView
android:id="@+id/application_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="?attr/listPreferredItemPaddingStart"
android:layout_marginTop="6dip"
android:textAppearance="?android:attr/textAppearanceMedium"
tools:text="F-Droid" />
<TextView
android:id="@+id/package_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/application_label"
android:layout_below="@+id/application_label"
android:textAppearance="?android:attr/textAppearanceSmall"
tools:text="Application Manager" />
</TwoLineListItem>
</RelativeLayout>

@ -1,291 +1,302 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".panic.CalculatorActivity">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:theme="?attr/actionBarTheme" />
android:layout_height="match_parent"
tools:context=".panic.CalculatorActivity"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/topAppBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
app:liftOnScroll="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:navigationIcon="@drawable/ic_back"
style="@style/Widget.MaterialComponents.Toolbar.PrimarySurface" />
</com.google.android.material.appbar.AppBarLayout>
<TextView
android:id="@+id/textView"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:gravity="bottom|end"
android:padding="5dp"
android:textAlignment="textEnd"
android:textSize="22sp"
android:typeface="monospace"
app:layout_constraintBottom_toTopOf="@+id/ce"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar"
tools:text="1337+42" />
android:id="@+id/textView"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:gravity="bottom|end"
android:padding="5dp"
android:textAlignment="textEnd"
android:textSize="22sp"
android:typeface="monospace"
app:layout_constraintBottom_toTopOf="@+id/ce"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/topAppBarLayout"
tools:text="1337+42" />
<Button
android:id="@+id/times"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="op"
android:text="×"
app:layout_constraintBottom_toTopOf="@+id/seven"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="HardcodedText" />
android:id="@+id/times"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="op"
android:text="×"
app:layout_constraintBottom_toTopOf="@+id/seven"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="HardcodedText" />
<Button
android:id="@+id/divided"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="op"
android:text="÷"
app:layout_constraintBottom_toTopOf="@+id/eight"
app:layout_constraintStart_toEndOf="@+id/times"
tools:ignore="HardcodedText" />
android:id="@+id/divided"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="op"
android:text="÷"
app:layout_constraintBottom_toTopOf="@+id/eight"
app:layout_constraintStart_toEndOf="@+id/times"
tools:ignore="HardcodedText" />
<Button
android:id="@+id/c"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="c"
android:text="C"
app:layout_constraintBottom_toTopOf="@+id/nine"
app:layout_constraintStart_toEndOf="@+id/divided"
tools:ignore="HardcodedText" />
android:id="@+id/c"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="c"
android:text="C"
app:layout_constraintBottom_toTopOf="@+id/nine"
app:layout_constraintStart_toEndOf="@+id/divided"
tools:ignore="HardcodedText" />
<Button
android:id="@+id/seven"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="number"
android:text="7"
app:layout_constraintBottom_toTopOf="@+id/four"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="HardcodedText" />
android:id="@+id/seven"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="number"
android:text="7"
app:layout_constraintBottom_toTopOf="@+id/four"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="HardcodedText" />
<Button
android:id="@+id/eight"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="number"
android:text="8"
app:layout_constraintBottom_toTopOf="@+id/five"
app:layout_constraintStart_toEndOf="@+id/seven"
tools:ignore="HardcodedText" />
android:id="@+id/eight"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="number"
android:text="8"
app:layout_constraintBottom_toTopOf="@+id/five"
app:layout_constraintStart_toEndOf="@+id/seven"
tools:ignore="HardcodedText" />
<Button
android:id="@+id/nine"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="number"
android:text="9"
app:layout_constraintBottom_toTopOf="@+id/six"
app:layout_constraintStart_toEndOf="@+id/eight"
tools:ignore="HardcodedText" />
android:id="@+id/nine"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="number"
android:text="9"
app:layout_constraintBottom_toTopOf="@+id/six"
app:layout_constraintStart_toEndOf="@+id/eight"
tools:ignore="HardcodedText" />
<Button
android:id="@+id/ce"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:onClick="ce"
android:text="CE"
app:layout_constraintBottom_toTopOf="@+id/plus"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/nine"
tools:ignore="HardcodedText" />
android:id="@+id/ce"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:onClick="ce"
android:text="CE"
app:layout_constraintBottom_toTopOf="@+id/plus"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/nine"
tools:ignore="HardcodedText" />
<Button
android:id="@+id/four"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="number"
android:text="4"
app:layout_constraintBottom_toTopOf="@+id/one"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="HardcodedText" />
android:id="@+id/four"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="number"
android:text="4"
app:layout_constraintBottom_toTopOf="@+id/one"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="HardcodedText" />
<Button
android:id="@+id/five"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="number"
android:text="5"
app:layout_constraintBottom_toTopOf="@+id/two"
app:layout_constraintStart_toEndOf="@+id/four"
tools:ignore="HardcodedText" />
android:id="@+id/five"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="number"
android:text="5"
app:layout_constraintBottom_toTopOf="@+id/two"
app:layout_constraintStart_toEndOf="@+id/four"
tools:ignore="HardcodedText" />
<Button
android:id="@+id/six"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="number"
android:text="6"
app:layout_constraintBottom_toTopOf="@+id/three"
app:layout_constraintStart_toEndOf="@+id/five"
tools:ignore="HardcodedText" />
android:id="@+id/six"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="number"
android:text="6"
app:layout_constraintBottom_toTopOf="@+id/three"
app:layout_constraintStart_toEndOf="@+id/five"
tools:ignore="HardcodedText" />
<Button
android:id="@+id/plus"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:onClick="op"
android:text="+"
app:layout_constraintBottom_toTopOf="@+id/minus"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/six"
tools:ignore="HardcodedText" />
android:id="@+id/plus"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:onClick="op"
android:text="+"
app:layout_constraintBottom_toTopOf="@+id/minus"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/six"
tools:ignore="HardcodedText" />
<Button
android:id="@+id/minus"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:onClick="op"
android:text="-"
app:layout_constraintBottom_toTopOf="@+id/equals"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/three"
tools:ignore="HardcodedText" />
android:id="@+id/minus"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:onClick="op"
android:text="-"
app:layout_constraintBottom_toTopOf="@+id/equals"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/three"
tools:ignore="HardcodedText" />
<Button
android:id="@+id/one"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="number"
android:text="1"
app:layout_constraintBottom_toTopOf="@+id/zero"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="HardcodedText" />
android:id="@+id/one"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="number"
android:text="1"
app:layout_constraintBottom_toTopOf="@+id/zero"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="HardcodedText" />
<Button
android:id="@+id/two"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="number"
android:text="2"
app:layout_constraintBottom_toTopOf="@+id/comma"
app:layout_constraintStart_toEndOf="@+id/one"
tools:ignore="HardcodedText" />
android:id="@+id/two"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="number"
android:text="2"
app:layout_constraintBottom_toTopOf="@+id/comma"
app:layout_constraintStart_toEndOf="@+id/one"
tools:ignore="HardcodedText" />
<Button
android:id="@+id/three"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="number"
android:text="3"
app:layout_constraintBottom_toTopOf="@+id/percent"
app:layout_constraintStart_toEndOf="@+id/two"
tools:ignore="HardcodedText" />
android:id="@+id/three"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="number"
android:text="3"
app:layout_constraintBottom_toTopOf="@+id/percent"
app:layout_constraintStart_toEndOf="@+id/two"
tools:ignore="HardcodedText" />
<Button
android:id="@+id/zero"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="number"
android:text="0"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="HardcodedText" />
android:id="@+id/zero"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="number"
android:text="0"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="HardcodedText" />
<Button
android:id="@+id/comma"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="number"
android:text="."
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/zero"
tools:ignore="HardcodedText" />
android:id="@+id/comma"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="number"
android:text="."
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/zero"
tools:ignore="HardcodedText" />
<Button
android:id="@+id/percent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="op"
android:text="%"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/comma"
tools:ignore="HardcodedText" />
android:id="@+id/percent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="op"
android:text="%"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/comma"
tools:ignore="HardcodedText" />
<Button
android:id="@+id/equals"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:onClick="op"
android:text="="
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toEndOf="@+id/three"
app:layout_constraintTop_toTopOf="@+id/three"
tools:ignore="HardcodedText" />
android:id="@+id/equals"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:onClick="op"
android:text="="
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toEndOf="@+id/three"
app:layout_constraintTop_toTopOf="@+id/three"
tools:ignore="HardcodedText" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -1,21 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
app:theme="?attr/actionBarTheme" />
android:layout_height="match_parent"
android:orientation="vertical"
android:fitsSystemWindows="true">
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
class="org.fdroid.fdroid.panic.PanicPreferencesFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
app:liftOnScroll="true">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:title="@string/panic_settings"
app:navigationIcon="@drawable/ic_back"
style="@style/Widget.MaterialComponents.Toolbar.PrimarySurface" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.fragment.app.FragmentContainerView
android:id="@+id/fragment_container"
class="org.fdroid.fdroid.panic.PanicPreferencesFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>

@ -5,7 +5,8 @@
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:layout_width="match_parent"

@ -28,7 +28,6 @@
android:layout_marginStart="?attr/listPreferredItemPaddingStart"
android:layout_marginTop="6dip"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
tools:src="@drawable/ic_launcher"
tools:ignore="ContentDescription" />
@ -43,9 +42,7 @@
android:layout_centerVertical="true" />
<TwoLineListItem
android:layout_toRightOf="@android:id/icon"
android:layout_toEndOf="@android:id/icon"
android:layout_toLeftOf="@id/checkbox"
android:layout_toStartOf="@id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -66,7 +63,6 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/application_label"
android:layout_alignLeft="@+id/application_label"
android:layout_below="@+id/application_label"
android:textAppearance="?android:attr/textAppearanceSmall"
tools:text="Application Manager" />

@ -1,24 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:titleTextAppearance="@style/SwapTheme.Wizard.Text"
titleTextAppearance="@style/SwapTheme.Wizard.Text"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
tools:ignore="UnusedAttribute"/>
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
app:liftOnScroll="true">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:navigationIcon="@drawable/ic_back"
style="@style/Widget.MaterialComponents.Toolbar.PrimarySurface" />
</com.google.android.material.appbar.AppBarLayout>
<FrameLayout
android:id="@+id/container"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
android:layout_height="fill_parent" />
</LinearLayout>

@ -3,13 +3,9 @@
<style name="SwapTheme.Wizard" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorButtonNormal">@color/swap_bright_blue</item>
<item name="actionButtonStyle">@style/SwapTheme.Wizard.ActionButton</item>
<item name="actionBarStyle">@style/Widget.AppCompat.ActionBar.Solid</item>
</style>
<style name="SwapTheme.StartSwap" parent="AppThemeLight">
<item name="background">@android:color/white</item>
</style>
<style name="SwapTheme.StartSwap" parent="Theme.App"/>
<style name="SwapTheme.StartSwap.Text" parent="@style/SwapTheme.StartSwap">
</style>
@ -17,10 +13,10 @@
<style name="SwapTheme.BluetoothDeviceList" parent="@style/SwapTheme.Wizard">
</style>
<style name="SwapTheme.AppList" parent="AppThemeLight">
<style name="SwapTheme.AppList" parent="Base.Theme.App">
</style>
<style name="SwapTheme.AppList.ListItem" parent="AppThemeLight">
<style name="SwapTheme.AppList.ListItem" parent="Theme.App">
</style>
<style name="SwapTheme.AppList.SwapSuccessBase">

@ -61,7 +61,7 @@
android:allowBackup="true"
android:fullBackupContent="@xml/backup_rules"
android:networkSecurityConfig="@xml/network_security_config"
android:theme="@style/AppThemeLight"
android:theme="@style/Theme.App"
android:supportsRtl="true">
<provider
@ -131,7 +131,6 @@
<activity
android:name=".privileged.views.InstallConfirmActivity"
android:label="@string/menu_install"
android:theme="@style/MinWithDialogBaseThemeLight"
android:excludeFromRecents="true"
android:parentActivityName=".views.main.MainActivity"
android:configChanges="layoutDirection|locale">
@ -141,8 +140,7 @@
</activity>
<activity
android:name=".privileged.views.UninstallDialogActivity"
android:excludeFromRecents="true"
android:theme="@style/AppThemeTransparent"/>
android:excludeFromRecents="true" />
<activity
android:name=".views.ManageReposActivity"
android:label="@string/menu_manage"
@ -180,7 +178,6 @@
</activity>
<activity
android:name=".acra.CrashReportActivity"
android:theme="@style/AppThemeDark"
android:process=":error_report"
android:launchMode="singleInstance"
android:excludeFromRecents="true"
@ -546,7 +543,7 @@
android:value=".views.main.MainActivity"/>
</activity>
<activity android:name=".AboutActivity" android:theme="@style/Theme.AppCompat.Light.Dialog"/>
<activity android:name=".AboutActivity" />
<activity android:name=".installer.FileInstallerActivity" android:theme="@style/AppThemeTransparent"/>
</application>

@ -10,9 +10,6 @@ public class AboutActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
FDroidApp fdroidApp = (FDroidApp) getApplication();
fdroidApp.applyDialogTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.about);

@ -24,7 +24,6 @@
package org.fdroid.fdroid;
import android.annotation.TargetApi;
import androidx.appcompat.app.AppCompatActivity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.app.Application;
@ -48,8 +47,11 @@ import android.view.WindowManager;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;
import androidx.collection.LongSparseArray;
import androidx.core.content.ContextCompat;
import com.nostra13.universalimageloader.cache.disc.DiskCache;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.disc.impl.ext.LruDiskCache;
@ -152,30 +154,46 @@ public class FDroidApp extends Application implements androidx.work.Configuratio
private static Theme curTheme = Theme.light;
public void reloadTheme() {
curTheme = Preferences.get().getTheme();
}
public void applyTheme(AppCompatActivity activity) {
activity.setTheme(getCurThemeResId());
setSecureWindow(activity);
}
public static int getCurThemeResId() {
switch (curTheme) {
case light:
return R.style.AppThemeLight;
case dark:
return R.style.AppThemeDark;
case night:
return R.style.AppThemeNight;
default:
return R.style.AppThemeLight;
/**
* Apply pure black background in dark theme setting. Must be called in every activity's
* {@link AppCompatActivity#onCreate()}, before super.onCreate().
* @param activity The activity to apply the setting.
*/
public void applyPureBlackBackgroundInDarkTheme(AppCompatActivity activity) {
final boolean isPureBlack = Preferences.get().isPureBlack();
if (isPureBlack) {
activity.setTheme(R.style.Theme_App_Black);
}
}
public void applyTheme() {
curTheme = Preferences.get().getTheme();
switch (curTheme) {
case dark:
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
break;
case light:
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
break;
default:
// `Set by Battery Saver` for Q above (inclusive), `Use system default` for Q below
// https://medium.com/androiddevelopers/appcompat-v23-2-daynight-d10f90c83e94
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY);
} else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
}
break;
}
}
// TODO: ResId no longer exists.
public static int getCurThemeResId() {
return R.style.Theme_App;
}
public static boolean isAppThemeLight() {
return curTheme == Theme.light;
return AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_NO;
}
public void applyDialogTheme(AppCompatActivity activity) {
@ -191,35 +209,13 @@ public class FDroidApp extends Application implements androidx.work.Configuratio
private static int getCurDialogThemeResId() {
switch (curTheme) {
case light:
return R.style.MinWithDialogBaseThemeLight;
case dark:
return R.style.MinWithDialogBaseThemeDark;
case night:
case dark: case night:
return R.style.MinWithDialogBaseThemeDark;
default:
return R.style.MinWithDialogBaseThemeLight;
}
}
/**
* Force reload the {@link AppCompatActivity to make theme changes take effect.}
* Same as {@link Languages#forceChangeLanguage(AppCompatActivity)}
*
* @param activity the {@code AppCompatActivity} to force reload
*/
public static void forceChangeTheme(AppCompatActivity activity) {
Intent intent = activity.getIntent();
if (intent == null) { // when launched as LAUNCHER
return;
}
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
activity.finish();
activity.overridePendingTransition(0, 0);
activity.startActivity(intent);
activity.overridePendingTransition(0, 0);
}
public static void enableBouncyCastle() {
Security.addProvider(BOUNCYCASTLE_PROVIDER);
}
@ -393,7 +389,8 @@ public class FDroidApp extends Application implements androidx.work.Configuratio
PRNGFixes.apply();
curTheme = preferences.getTheme();
applyTheme();
configureProxy(preferences);
@ -650,7 +647,7 @@ public class FDroidApp extends Application implements androidx.work.Configuratio
/**
* Put proxy settings (or Tor settings) globally into effect based on whats configured in Preferences.
* <p>
*
* Must be called on App startup and after every proxy configuration change.
*/
public static void configureProxy(Preferences preferences) {

@ -39,8 +39,9 @@ public class NfcNotEnabledActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
FDroidApp fdroidApp = (FDroidApp) getApplication();
fdroidApp.applyPureBlackBackgroundInDarkTheme(this);
((FDroidApp) getApplication()).applyTheme(this);
super.onCreate(savedInstanceState);
final Intent intent = new Intent();

@ -87,6 +87,7 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
public static final String PREF_AUTO_DOWNLOAD_INSTALL_UPDATES = "updateAutoDownload";
public static final String PREF_UPDATE_NOTIFICATION_ENABLED = "updateNotify";
public static final String PREF_THEME = "theme";
public static final String PREF_USE_PURE_BLACK_DARK_THEME = "usePureBlackDarkTheme";
public static final String PREF_SHOW_INCOMPAT_VERSIONS = "incompatibleVersions";
public static final String PREF_SHOW_ANTI_FEATURE_APPS = "showAntiFeatureApps";
public static final String PREF_FORCE_TOUCH_APPS = "ignoreTouchscreen";
@ -151,7 +152,8 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
public enum Theme {
light,
dark,
night,
followSystem,
night, // Obsolete
lightWithDarkActionBar, // Obsolete
}
@ -395,6 +397,10 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
return Theme.valueOf(preferences.getString(Preferences.PREF_THEME, null));
}
public boolean isPureBlack() {
return preferences.getBoolean(Preferences.PREF_USE_PURE_BLACK_DARK_THEME, false);
}
public boolean isLocalRepoHttpsEnabled() {
return false; // disabled until it works well
}

@ -174,9 +174,10 @@ public class InstallConfirmActivity extends AppCompatActivity implements OnCance
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
FDroidApp fdroidApp = (FDroidApp) getApplication();
fdroidApp.applyPureBlackBackgroundInDarkTheme(this);
((FDroidApp) getApplication()).applyTheme(this);
super.onCreate(icicle);
intent = getIntent();
Uri uri = intent.getData();

@ -45,13 +45,13 @@ import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.core.content.ContextCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.appbar.MaterialToolbar;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
@ -106,15 +106,15 @@ public class AppDetailsActivity extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
fdroidApp = (FDroidApp) getApplication();
fdroidApp.applyTheme(this);
FDroidApp fdroidApp = (FDroidApp) getApplication();
fdroidApp.applyPureBlackBackgroundInDarkTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.app_details2);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(""); // Nice and clean toolbar
toolbar.setNavigationIcon(R.drawable.ic_back);
MaterialToolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowTitleEnabled(false); // clear title
supportPostponeEnterTransition();
String packageName = getPackageNameFromIntent(getIntent());

@ -29,10 +29,13 @@ import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.app.ShareCompat;
import org.apache.commons.io.IOUtils;
import org.fdroid.fdroid.Preferences;
import com.google.android.material.appbar.MaterialToolbar;
import org.fdroid.fdroid.FDroidApp;
import org.fdroid.fdroid.R;
import org.fdroid.fdroid.data.Repo;
import org.fdroid.fdroid.data.RepoProvider;
@ -50,17 +53,19 @@ public class InstallHistoryActivity extends AppCompatActivity {
public static final String EXTRA_SHOW_FDROID_METRICS = "showFDroidMetrics";
private boolean showingInstallHistory;
private Toolbar toolbar;
private MaterialToolbar toolbar;
private MenuItem showMenuItem;
private TextView textView;
private String appName;
@Override
protected void onCreate(Bundle savedInstanceState) {
FDroidApp fdroidApp = (FDroidApp) getApplication();
fdroidApp.applyPureBlackBackgroundInDarkTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_install_history);
toolbar = findViewById(R.id.toolbar);
toolbar.setTitle(getString(R.string.install_history));
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

@ -40,6 +40,7 @@ import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
@ -60,6 +61,9 @@ import androidx.loader.app.LoaderManager;
import androidx.loader.content.CursorLoader;
import androidx.loader.content.Loader;
import com.google.android.material.appbar.MaterialToolbar;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import org.fdroid.fdroid.AddRepoIntentService;
import org.fdroid.fdroid.FDroidApp;
import org.fdroid.fdroid.IndexUpdater;
@ -96,8 +100,6 @@ public class ManageReposActivity extends AppCompatActivity
IS_SWAP
}
private Toolbar toolbar;
/**
* True if activity started with an intent such as from QR code. False if
* opened from, e.g. the main menu.
@ -106,15 +108,37 @@ public class ManageReposActivity extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
FDroidApp fdroidApp = (FDroidApp) getApplication();
fdroidApp.applyPureBlackBackgroundInDarkTheme(this);
((FDroidApp) getApplication()).applyTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.repo_list_activity);
toolbar = (Toolbar) findViewById(R.id.toolbar);
MaterialToolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
if (menuItem.getItemId() == R.id.action_add_repo) {
showAddRepo();
return true;
}
return false;
}
});
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent upIntent = NavUtils.getParentActivityIntent(ManageReposActivity.this);
if (NavUtils.shouldUpRecreateTask(ManageReposActivity.this, upIntent) || isTaskRoot()) {
TaskStackBuilder.create(ManageReposActivity.this).addNextIntentWithParentStack(upIntent)
.startActivities();
} else {
NavUtils.navigateUpTo(ManageReposActivity.this, upIntent);
}
}
});
final ListView repoList = (ListView) findViewById(R.id.list);
repoAdapter = new RepoAdapter(this);
@ -129,6 +153,13 @@ public class ManageReposActivity extends AppCompatActivity
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.manage_repos, menu);
return true;
}
@Override
protected void onResume() {
super.onResume();
@ -154,32 +185,6 @@ public class ManageReposActivity extends AppCompatActivity
super.finish();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
toolbar.inflateMenu(R.menu.manage_repos);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_add_repo:
showAddRepo();
return true;
case android.R.id.home:
Intent upIntent = NavUtils.getParentActivityIntent(this);
if (NavUtils.shouldUpRecreateTask(this, upIntent) || isTaskRoot()) {
TaskStackBuilder.create(this)
.addNextIntentWithParentStack(upIntent)
.startActivities();
} else {
NavUtils.navigateUpTo(this, upIntent);
}
return true;
}
return super.onOptionsItemSelected(item);
}
public String getPrimaryClipAsText() {
CharSequence text = null;
ClipboardManager clipboardManager = ContextCompat.getSystemService(this, ClipboardManager.class);
@ -208,7 +213,7 @@ public class ManageReposActivity extends AppCompatActivity
String text = getPrimaryClipAsText();
String fingerprint = null;
String username = null;
String password = null;
StringBuilder password = null;
if (!TextUtils.isEmpty(text)) {
try {
new URL(text);
@ -224,9 +229,9 @@ public class ManageReposActivity extends AppCompatActivity
String[] userInfoTokens = userInfo.split(":");
if (userInfoTokens.length >= 2) {
username = userInfoTokens[0];
password = userInfoTokens[1];
password = new StringBuilder(userInfoTokens[1]);
for (int i = 2; i < userInfoTokens.length; i++) {
password += ":" + userInfoTokens[i];
password.append(":").append(userInfoTokens[i]);
}
}
}
@ -240,7 +245,7 @@ public class ManageReposActivity extends AppCompatActivity
if (TextUtils.isEmpty(text)) {
text = DEFAULT_NEW_REPO_TEXT;
}
showAddRepo(text, fingerprint, username, password);
showAddRepo(text, fingerprint, username, password != null ? password.toString() : null);
}
private void showAddRepo(String newAddress, String newFingerprint, String username, String password) {
@ -289,22 +294,21 @@ public class ManageReposActivity extends AppCompatActivity
}
final View view = getLayoutInflater().inflate(R.layout.addrepo, null);
addRepoDialog = new AlertDialog.Builder(context).setView(view).create();
MaterialAlertDialogBuilder addRepoDialogBuilder = new MaterialAlertDialogBuilder(context);
addRepoDialogBuilder.setView(view);
final EditText uriEditText = (EditText) view.findViewById(R.id.edit_uri);
final EditText fingerprintEditText = (EditText) view.findViewById(R.id.edit_fingerprint);
addRepoDialog.setTitle(R.string.repo_add_title);
addRepoDialog.setButton(DialogInterface.BUTTON_NEGATIVE,
getString(R.string.cancel),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
if (finishAfterAddingRepo) {
ManageReposActivity.this.finish();
}
}
});
addRepoDialogBuilder.setTitle(R.string.repo_add_title);
addRepoDialogBuilder.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
if (finishAfterAddingRepo) {
finish();
}
}
});
// HACK:
// After adding a new repo, need to show feedback to the user.
@ -319,15 +323,14 @@ public class ManageReposActivity extends AppCompatActivity
// hang around so we can show further info on it.
//
// Thus, the hack described at http://stackoverflow.com/a/15619098 is implemented.
addRepoDialog.setButton(DialogInterface.BUTTON_POSITIVE,
getString(R.string.repo_add_add),
addRepoDialogBuilder.setPositiveButton(getString(R.string.repo_add_add),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
addRepoDialog.show();
addRepoDialog = addRepoDialogBuilder.show();
// This must be *after* addRepoDialog.show() otherwise getButtion() returns null:
// https://code.google.com/p/android/issues/detail?id=6360

@ -33,8 +33,11 @@ import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.WindowManager;
import android.widget.Toast;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.preference.CheckBoxPreference;
import androidx.preference.EditTextPreference;
@ -44,10 +47,13 @@ import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceGroup;
import androidx.preference.SeekBarPreference;
import androidx.preference.SwitchPreference;
import androidx.preference.SwitchPreferenceCompat;
import androidx.recyclerview.widget.LinearSmoothScroller;
import androidx.recyclerview.widget.RecyclerView;
import info.guardianproject.netcipher.proxy.OrbotHelper;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import org.fdroid.fdroid.FDroidApp;
import org.fdroid.fdroid.Languages;
import org.fdroid.fdroid.Preferences;
@ -72,6 +78,7 @@ public class PreferencesFragment extends PreferenceFragmentCompat
Preferences.PREF_SHOW_ANTI_FEATURE_APPS,
Preferences.PREF_SHOW_INCOMPAT_VERSIONS,
Preferences.PREF_THEME,
Preferences.PREF_USE_PURE_BLACK_DARK_THEME,
Preferences.PREF_FORCE_TOUCH_APPS,
Preferences.PREF_LOCAL_REPO_NAME,
Preferences.PREF_LANGUAGE,
@ -99,8 +106,8 @@ public class PreferencesFragment extends PreferenceFragmentCompat
private LiveSeekBarPreference overWifiSeekBar;
private LiveSeekBarPreference overDataSeekBar;
private LiveSeekBarPreference updateIntervalSeekBar;
private SwitchPreference enableProxyCheckPref;
private SwitchPreference useTorCheckPref;
private SwitchPreferenceCompat enableProxyCheckPref;
private SwitchPreferenceCompat useTorCheckPref;
private Preference updateAutoDownloadPref;
private CheckBoxPreference keepInstallHistoryPref;
private CheckBoxPreference sendToFDroidMetricsPref;
@ -121,6 +128,12 @@ public class PreferencesFragment extends PreferenceFragmentCompat
addPreferencesFromResource(R.xml.preferences);
otherPrefGroup = (PreferenceGroup) findPreference("pref_category_other");
Preference aboutPreference = findPreference("pref_about");
if (aboutPreference != null) {
aboutPreference.setOnPreferenceClickListener(aboutPrefClickedListener);
}
keepInstallHistoryPref = (CheckBoxPreference) findPreference(Preferences.PREF_KEEP_INSTALL_HISTORY);
sendToFDroidMetricsPref = findPreference(Preferences.PREF_SEND_TO_FDROID_METRICS);
sendToFDroidMetricsPref.setEnabled(keepInstallHistoryPref.isChecked());
@ -132,9 +145,9 @@ public class PreferencesFragment extends PreferenceFragmentCompat
installHistoryPref.setTitle(R.string.install_history);
}
useTorCheckPref = (SwitchPreference) findPreference(Preferences.PREF_USE_TOR);
useTorCheckPref = (SwitchPreferenceCompat) findPreference(Preferences.PREF_USE_TOR);
useTorCheckPref.setOnPreferenceChangeListener(useTorChangedListener);
enableProxyCheckPref = (SwitchPreference) findPreference(Preferences.PREF_ENABLE_PROXY);
enableProxyCheckPref = (SwitchPreferenceCompat) findPreference(Preferences.PREF_ENABLE_PROXY);
enableProxyCheckPref.setOnPreferenceChangeListener(proxyEnabledChangedListener);
updateAutoDownloadPref = findPreference(Preferences.PREF_AUTO_DOWNLOAD_INSTALL_UPDATES);
@ -269,9 +282,17 @@ public class PreferencesFragment extends PreferenceFragmentCompat
if (changing) {
AppCompatActivity activity = (AppCompatActivity) getActivity();
FDroidApp fdroidApp = (FDroidApp) activity.getApplication();
fdroidApp.reloadTheme();
fdroidApp.applyTheme(activity);
FDroidApp.forceChangeTheme(activity);
fdroidApp.applyTheme();
}
break;
case Preferences.PREF_USE_PURE_BLACK_DARK_THEME:
if (changing) {
AppCompatActivity activity = (AppCompatActivity) getActivity();
// Theme will be applied upon activity creation
if (activity != null) {
activity.recreate();
}
}
break;
@ -349,7 +370,7 @@ public class PreferencesFragment extends PreferenceFragmentCompat
break;
case Preferences.PREF_ENABLE_PROXY:
SwitchPreference checkPref = (SwitchPreference) findPreference(key);
SwitchPreferenceCompat checkPref = (SwitchPreferenceCompat) findPreference(key);
checkPref.setSummary(R.string.enable_proxy_summary);
break;
@ -400,6 +421,31 @@ public class PreferencesFragment extends PreferenceFragmentCompat
}
}
/**
* About dialog click listener
* <p>
* TODO: this might need to be changed when updated to the new preference pattern
*/
private final Preference.OnPreferenceClickListener aboutPrefClickedListener =
new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
final View view = getLayoutInflater().inflate(R.layout.about, null);
final Context context = requireContext();
String versionName = Utils.getVersionName(context);
if (versionName != null) {
((TextView) view.findViewById(R.id.version)).setText(versionName);
}
new MaterialAlertDialogBuilder(context)
.setView(view)
.setPositiveButton(R.string.ok, null)
.show();
return true;
}
};
/**
* Initializes SystemInstaller preference, which can only be enabled when F-Droid is installed as a system-app
*/

@ -29,13 +29,14 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.app.NavUtils;
import androidx.core.content.ContextCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.appbar.MaterialToolbar;
import org.fdroid.fdroid.FDroidApp;
import org.fdroid.fdroid.NfcHelper;
import org.fdroid.fdroid.NfcNotEnabledActivity;
@ -103,13 +104,14 @@ public class RepoDetailsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
FDroidApp fdroidApp = (FDroidApp) getApplication();
fdroidApp.applyPureBlackBackgroundInDarkTheme(this);
((FDroidApp) getApplication()).applyTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_repo_details);
Toolbar toolbar = findViewById(R.id.toolbar);
MaterialToolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

@ -49,7 +49,7 @@ public class ScreenShotsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
FDroidApp fdroidApp = (FDroidApp) getApplication();
fdroidApp.applyTheme(this);
fdroidApp.applyPureBlackBackgroundInDarkTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_screenshots);

@ -87,7 +87,9 @@ public class AppListActivity extends AppCompatActivity implements LoaderManager.
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
((FDroidApp) getApplication()).applyTheme(this);
FDroidApp fdroidApp = (FDroidApp) getApplication();
fdroidApp.applyPureBlackBackgroundInDarkTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_app_list);

@ -21,19 +21,22 @@ package org.fdroid.fdroid.views.installed;
import android.database.Cursor;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.loader.app.LoaderManager;
import androidx.core.app.ShareCompat;
import androidx.loader.content.CursorLoader;
import androidx.loader.content.Loader;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.appcompat.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ShareCompat;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.CursorLoader;
import androidx.loader.content.Loader;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.appbar.MaterialToolbar;
import org.fdroid.fdroid.FDroidApp;
import org.fdroid.fdroid.R;
import org.fdroid.fdroid.data.App;
@ -48,14 +51,14 @@ public class InstalledAppsActivity extends AppCompatActivity implements LoaderMa
@Override
protected void onCreate(Bundle savedInstanceState) {
FDroidApp fdroidApp = (FDroidApp) getApplication();
fdroidApp.applyPureBlackBackgroundInDarkTheme(this);
((FDroidApp) getApplication()).applyTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.installed_apps_layout);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(getString(R.string.installed_apps__activity_title));
MaterialToolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

@ -40,6 +40,7 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;
import androidx.core.content.ContextCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.recyclerview.widget.LinearLayoutManager;
@ -109,7 +110,9 @@ public class MainActivity extends AppCompatActivity implements BottomNavigationB
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
((FDroidApp) getApplication()).applyTheme(this);
FDroidApp fdroidApp = (FDroidApp) getApplication();
fdroidApp.applyPureBlackBackgroundInDarkTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
@ -457,12 +460,10 @@ public class MainActivity extends AppCompatActivity implements BottomNavigationB
}
private int getBottomNavigationBackgroundColorResId() {
switch (FDroidApp.getCurThemeResId()) {
case R.style.AppThemeNight:
return R.color.fdroid_night;
default:
return R.color.fdroid_blue;
if (AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_YES) {
return R.color.fdroid_night;
}
return R.color.fdroid_blue;
}
private static class NonScrollingHorizontalLayoutManager extends LinearLayoutManager {

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#fff">
<item>
<shape android:shape="rectangle">
<corners android:radius="24dp" />
<solid android:color="@color/fdroid_blue" />
</shape>
</item>
</ripple>

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/fdroid_blue">
<item>
<shape android:shape="rectangle">
<corners android:radius="24dp" />
<solid android:color="#fff" />
<stroke android:color="@color/fdroid_blue" android:width="2dp" />
</shape>
</item>
</ripple>

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<corners android:radius="24dp" />
<solid android:color="@color/fdroid_blue_dark" />
</shape>
</item>
<item android:state_checked="true">
<shape android:shape="rectangle">
<corners android:radius="24dp" />
<solid android:color="@color/fdroid_blue_dark" />
</shape>
</item>
<item android:state_enabled="false">
<shape android:shape="rectangle">
<corners android:radius="24dp" />
<solid android:color="@color/fdroid_blue_dark" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<corners android:radius="24dp" />
<solid android:color="@color/fdroid_blue" />
</shape>
</item>
</selector>

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<corners android:radius="24dp" />
<solid android:color="@color/fdroid_blue" />
</shape>
</item>
<item android:state_checked="true">
<shape android:shape="rectangle">
<corners android:radius="24dp" />
<solid android:color="@color/fdroid_blue" />
</shape>
</item>
<item android:state_enabled="false">
<shape android:shape="rectangle">
<corners android:radius="24dp" />
<solid android:color="@color/fdroid_blue" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<corners android:radius="24dp" />
<solid android:color="@android:color/white" />
<stroke android:color="@color/fdroid_blue" android:width="2dp" />
</shape>
</item>
</selector>

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#262627" />
</shape>

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="#ffffffff"
android:pathData="M18.3,5.71c-0.39,-0.39 -1.02,-0.39 -1.41,0L12,10.59 7.11,5.7c-0.39,-0.39 -1.02,-0.39 -1.41,0 -0.39,0.39 -0.39,1.02 0,1.41L10.59,12 5.7,16.89c-0.39,0.39 -0.39,1.02 0,1.41 0.39,0.39 1.02,0.39 1.41,0L12,13.41l4.89,4.89c0.39,0.39 1.02,0.39 1.41,0 0.39,-0.39 0.39,-1.02 0,-1.41L13.41,12l4.89,-4.89c0.38,-0.38 0.38,-1.02 0,-1.4z"/>
</vector>

@ -1,10 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="#FFFFFF"
android:pathData="M12,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z"/>
</vector>

@ -4,7 +4,7 @@
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FFFFFF"
android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z" />
<path
android:fillColor="#FFFFFF"
android:pathData="M15.5,14h-0.79l-0.28,-0.27c1.2,-1.4 1.82,-3.31 1.48,-5.34 -0.47,-2.78 -2.79,-5 -5.59,-5.34 -4.23,-0.52 -7.79,3.04 -7.27,7.27 0.34,2.8 2.56,5.12 5.34,5.59 2.03,0.34 3.94,-0.28 5.34,-1.48l0.27,0.28v0.79l4.25,4.25c0.41,0.41 1.08,0.41 1.49,0 0.41,-0.41 0.41,-1.08 0,-1.49L15.5,14zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z" />
</vector>

@ -1,10 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M1,21h22L12,2 1,21zM13,18h-2v-2h2v2zM13,14h-2v-4h2v4z" />
</vector>

@ -1,10 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M1,21h22L12,2 1,21zM13,18h-2v-2h2v2zM13,14h-2v-4h2v4z" />
</vector>

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="org.fdroid.fdroid.views.AppDetailsActivity"
android:background="?attr/appDetailsBackground"
android:fitsSystemWindows="true"
android:id="@+id/rootCoordinator">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="@dimen/app_bar_height"
android:fitsSystemWindows="true"
app:layout_behavior="org.fdroid.fdroid.views.FixAppBarLayoutBehavior">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
app:contentScrim="?attr/colorPrimarySurface"
app:statusBarScrim="?attr/colorPrimarySurface"
app:expandedTitleTextAppearance="@style/TextAppearance.App.CollapsingToolbar.Expanded"
app:collapsedTitleTextAppearance="@style/TextAppearance.App.CollapsingToolbar.Collapsed"
app:expandedTitleMarginTop="24dp">
<org.fdroid.fdroid.views.apps.FeatureImage
android:id="@+id/feature_graphic"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:fitsSystemWindows="true"
app:layout_collapseMode="parallax" />
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:navigationIcon="@drawable/ic_back"
android:background="@android:color/transparent"
app:layout_collapseMode="pin"
style="@style/Widget.MaterialComponents.Toolbar.PrimarySurface"
android:elevation="0dp" />
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvDetails"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
app:layoutManager="LinearLayoutManager"
tools:context="org.fdroid.fdroid.views.AppDetailsActivity"
tools:showIn="@layout/app_details2" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

@ -0,0 +1,266 @@
<?xml version="1.0" encoding="UTF-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/details_activity_padding"
app:cardBackgroundColor="?attr/appDetailsCardBackground"
app:cardCornerRadius="3dp"
app:cardElevation="3dp"
android:animateLayoutChanges="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="8dp"
android:paddingBottom="8dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp">
<!-- Icon, Name, Author (optional), Updated date -->
<RelativeLayout
android:id="@+id/icon_and_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="12dp">
<ImageView
android:id="@+id/icon"
android:layout_width="72dp"
android:layout_height="72dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginEnd="8dp"
android:scaleType="fitCenter"
android:src="@drawable/ic_repo_app_default"
android:transitionName="@string/transition_app_item_icon" />
<!-- Name, Author (optional), Updated date -->
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_marginTop="8dp"
android:layout_toEndOf="@id/icon"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/DetailsAppTitleStyle"
tools:text="Really Long App Title Which Wraps Around Onto the Second Line" />
<TextView
android:id="@+id/author"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
tools:text="Author" />
<TextView
android:id="@+id/text_last_update"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/DetailsLastUpdatedStyle"
android:textColor="@android:color/darker_gray"
tools:text="Update released 12 days ago" />
</LinearLayout>
</RelativeLayout>
<!-- Progress info -->
<RelativeLayout
android:id="@+id/progress_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/icon_and_name"
tools:visibility="gone">
<ImageView
android:id="@+id/progress_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:contentDescription="@string/app__tts__cancel_download"
android:src="@android:drawable/ic_menu_close_clear_cancel" />
<TextView
android:id="@+id/progress_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:contentDescription="@string/downloading"
android:focusable="true"
android:text="@string/downloading"
android:textAppearance="@style/TextAppearance.AppCompat.Small" />
<TextView
android:id="@+id/progress_percent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toStartOf="@id/progress_cancel"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
tools:text="500%" />
<ProgressBar
android:id="@+id/progress_bar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_below="@id/progress_label"
android:layout_alignParentStart="true"
android:layout_toStartOf="@id/progress_cancel"
/>
</RelativeLayout>
<!-- Install, Uninstall, Update, Open buttons -->
<LinearLayout
android:id="@+id/button_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/icon_and_name"
android:clipToPadding="false"
android:gravity="end"
android:paddingBottom="4dp"
android:visibility="visible">
<com.google.android.material.button.MaterialButton
android:id="@+id/secondaryButtonView"
style="@style/DetailsSecondaryButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:ellipsize="marquee"
tools:text="Uninstall" />
<com.google.android.material.button.MaterialButton
android:id="@+id/primaryButtonView"
style="@style/DetailsPrimaryButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_weight="0"
android:ellipsize="marquee"
tools:text="Open" />
</LinearLayout>
</RelativeLayout>
<TextView
android:id="@+id/summary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:paddingStart="8dp"
android:paddingLeft="8dp"
android:paddingEnd="8dp"
android:paddingRight="8dp"
android:padding="8dp"
android:scrollbars="none"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
android:textIsSelectable="true"
android:textStyle="bold"
android:background="?attr/detailPanel"
tools:text="App summary, one line - outlining what this app does" />
<TextView
android:id="@+id/latest"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/detailPanel"
android:paddingStart="8dp"
android:paddingLeft="8dp"
android:paddingTop="16dp"
android:paddingEnd="8dp"
android:paddingRight="8dp"
android:paddingBottom="16dp"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
tools:text="NEW IN VERSION 1.0.2233\n\nA lot has happened since the last build:\n\n\t• Improved UI\n\t• Bug fixes" />
<TextView
android:id="@+id/description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:scrollbars="none"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
android:textIsSelectable="true"
tools:text="This is the app description of this awezome app. It can be several lines long, but will be truncated at just a few if it is. A 'read more' button will appear so that you can expand the view and view the full text, if you wish. Yes, it will be blue and beautiful." />
<LinearLayout
android:id="@+id/anti_features_section"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:orientation="vertical">
<TextView
android:id="@+id/anti_features_warning"
style="@style/DetailsAntiFeaturesWarningStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableStart="@drawable/ic_warning"
android:drawablePadding="10dp"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:gravity="center_vertical"
android:text="@string/antifeatureswarning"
android:textAppearance="@style/TextAppearance.AppCompat.Body1" />
<TextView
android:id="@+id/label_anti_features"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:scrollbars="none"
android:text="@string/antifeatures"
android:textAllCaps="true"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
android:textStyle="bold" />
<!-- listing of all anti-features -->
<org.fdroid.fdroid.views.appdetails.AntiFeaturesListingView
android:id="@+id/anti_features_full_listing"
android:layout_marginBottom="8dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
<TextView
android:id="@+id/description_more"
style="@style/DetailsMoreButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="4dp"
android:text="@string/more" />
</LinearLayout>
</androidx.cardview.widget.CardView>

@ -1,7 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<LinearLayout
android:layout_width="match_parent"
@ -50,25 +51,6 @@
android:text="@string/license_gplv3_later"
style="@style/BodyText" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"
android:layout_marginTop="12dp"
android:paddingBottom="16dp"
android:clipToPadding="false">
<Button
android:layout_width="wrap_content"
android:minWidth="100dp"
android:layout_height="wrap_content"
style="@style/DetailsPrimaryButtonStyle"
android:id="@+id/ok_button"
android:text="@string/ok" />
</LinearLayout>
</LinearLayout>
</ScrollView>

@ -5,7 +5,8 @@
android:id="@+id/app_list_root"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<androidx.cardview.widget.CardView
android:id="@+id/search_card"

@ -4,25 +4,26 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".views.InstallHistoryActivity">
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".views.InstallHistoryActivity"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppThemeLight.AppBarOverlay">
<androidx.appcompat.widget.Toolbar
android:fitsSystemWindows="true"
app:liftOnScroll="true">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"/>
android:layout_height="?attr/actionBarSize"
app:title="@string/install_history"
app:navigationIcon="@drawable/ic_back"
style="@style/Widget.MaterialComponents.Toolbar.PrimarySurface" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.core.widget.NestedScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
@ -33,7 +34,7 @@
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"/>
android:layout_margin="16dp" />
</androidx.core.widget.NestedScrollView>

@ -3,7 +3,8 @@
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<com.ashokvarma.bottomnavigation.BottomNavigationBar
android:id="@+id/bottom_navigation"

@ -1,88 +1,98 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:title="@string/repo_details"
app:theme="?attr/actionBarTheme" />
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:fitsSystemWindows="true">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/repo_view"
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingEnd="?attr/listPreferredItemPaddingRight"
android:paddingLeft="?attr/listPreferredItemPaddingLeft"
android:paddingRight="?attr/listPreferredItemPaddingRight"
android:paddingStart="?attr/listPreferredItemPaddingLeft">
android:fitsSystemWindows="true"
app:liftOnScroll="true">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:title="@string/repo_details"
app:navigationIcon="@drawable/ic_back"
style="@style/Widget.MaterialComponents.Toolbar.PrimarySurface" />
</com.google.android.material.appbar.AppBarLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/repo_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingEnd="?attr/listPreferredItemPaddingRight"
android:paddingLeft="?attr/listPreferredItemPaddingLeft"
android:paddingRight="?attr/listPreferredItemPaddingRight"
android:paddingStart="?attr/listPreferredItemPaddingLeft">
<!-- URL of this repo -->
<TextView
style="@style/CaptionText"
android:text="@string/repo_url" />
style="@style/CaptionText"
android:text="@string/repo_url" />
<TextView
android:id="@+id/input_repo_url"
style="@style/BodyText" />
android:id="@+id/input_repo_url"
style="@style/BodyText" />
<!-- Name of this repo -->
<TextView
android:id="@+id/label_repo_name"
style="@style/CaptionText"
android:text="@string/repo_name" />
android:id="@+id/label_repo_name"
style="@style/CaptionText"
android:text="@string/repo_name" />
<TextView
android:id="@+id/text_repo_name"
style="@style/BodyText" />
android:id="@+id/text_repo_name"
style="@style/BodyText" />
<!-- Description - as pulled from the index file during last update... -->
<TextView
android:id="@+id/label_description"
style="@style/CaptionText"
android:text="@string/repo_description" />
android:id="@+id/label_description"
style="@style/CaptionText"
android:text="@string/repo_description" />
<TextView
android:id="@+id/text_description"
style="@style/BodyText" />
android:id="@+id/text_description"
style="@style/BodyText" />
<!-- Number of apps belonging to this repo -->
<TextView
android:id="@+id/label_num_apps"
style="@style/CaptionText"
android:text="@string/repo_num_apps" />
android:id="@+id/label_num_apps"
style="@style/CaptionText"
android:text="@string/repo_num_apps" />
<TextView
android:id="@+id/text_num_apps"
style="@style/BodyText" />
android:id="@+id/text_num_apps"
style="@style/BodyText" />
<!-- The last time this repo was updated -->
<TextView
android:id="@+id/label_last_update"
style="@style/CaptionText"
android:text="@string/repo_last_update" />
android:id="@+id/label_last_update"
style="@style/CaptionText"
android:text="@string/repo_last_update" />
<TextView
android:id="@+id/text_last_update"
style="@style/BodyText" />
android:id="@+id/text_last_update"
style="@style/BodyText" />
<!-- mirrors included in the index -->
<TextView
android:id="@+id/label_official_mirrors"
style="@style/CaptionText"
android:text="@string/repo_official_mirrors"
android:visibility="gone" />
android:id="@+id/label_official_mirrors"
style="@style/CaptionText"
android:text="@string/repo_official_mirrors"
android:visibility="gone" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/official_mirror_list"
@ -92,10 +102,10 @@
<!-- mirrors added by the user -->
<TextView
android:id="@+id/label_user_mirrors"
style="@style/CaptionText"
android:text="@string/repo_user_mirrors"
android:visibility="gone" />
android:id="@+id/label_user_mirrors"
style="@style/CaptionText"
android:text="@string/repo_user_mirrors"
android:visibility="gone" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/user_mirror_list"
@ -105,47 +115,47 @@
<!-- The credentials used to access this repo (optional) -->
<TextView
android:id="@+id/label_username"
style="@style/CaptionText"
android:text="@string/login_name" />
android:id="@+id/label_username"
style="@style/CaptionText"
android:text="@string/login_name" />
<TextView
android:id="@+id/text_username"
style="@style/BodyText" />
android:id="@+id/text_username"
style="@style/BodyText" />
<Button
android:id="@+id/button_edit_credentials"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="showChangePasswordDialog"
android:text="@string/repo_edit_credentials" />
android:id="@+id/button_edit_credentials"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="showChangePasswordDialog"
android:text="@string/repo_edit_credentials" />
<!-- Signature (or "unsigned" if none) -->
<TextView
android:id="@+id/label_repo_fingerprint"
style="@style/CaptionText"
android:text="@string/repo_fingerprint" />
android:id="@+id/label_repo_fingerprint"
style="@style/CaptionText"
android:text="@string/repo_fingerprint" />
<TextView
android:id="@+id/text_repo_fingerprint"
style="@style/BodyText"
android:typeface="monospace" />
android:id="@+id/text_repo_fingerprint"
style="@style/BodyText"
android:typeface="monospace" />
<TextView
android:id="@+id/text_repo_fingerprint_description"
style="@style/BodyText" />
android:id="@+id/text_repo_fingerprint_description"
style="@style/BodyText" />
<TextView
android:id="@+id/text_not_yet_updated"
style="@style/BodyText"
android:text="@string/repo_not_yet_updated" />
android:id="@+id/text_not_yet_updated"
style="@style/BodyText"
android:text="@string/repo_not_yet_updated" />
<ImageView
android:id="@+id/qr_code"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="16dp"
app:srcCompat="@drawable/swap_qr_example" />
android:id="@+id/qr_code"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="16dp"
app:srcCompat="@drawable/swap_qr_example" />
</LinearLayout>

@ -5,6 +5,7 @@
android:id="@+id/screenshot_view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="org.fdroid.fdroid.views.ScreenShotsActivity" />
tools:context="org.fdroid.fdroid.views.ScreenShotsActivity"
android:fitsSystemWindows="true"/>

@ -7,4 +7,5 @@
android:layout_height="match_parent"
android:contentDescription="@null"
android:padding="@dimen/layout_horizontal_margin"
tools:src="@drawable/screenshot_placeholder" />
tools:src="@drawable/screenshot_placeholder"
android:fitsSystemWindows="true"/>

@ -1,42 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="100dp"
android:layout_height="130dp"
android:background="?attr/categoryPreviewAppCardBackground"
android:padding="8dp">
android:id="@+id/card"
android:layout_width="120dp"
android:layout_height="144dp"
android:layout_margin="4dp">
<!-- Ignore ContentDescription because it is kind of meaningless to have TTS read out "App icon"
when it will inevitably read out the name of the app straight after. -->
<ImageView
android:id="@+id/icon"
android:layout_width="48dip"
android:layout_height="48dip"
tools:src="@drawable/ic_launcher"
android:scaleType="fitCenter"
android:transitionName="@string/transition_app_item_icon"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<TextView
tools:text="F-Droid An application summary which takes up too much space and must ellipsize"
android:layout_width="wrap_content"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/summary"
android:maxLines="3"
android:ellipsize="end"
app:layout_constraintTop_toBottomOf="@+id/icon"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginTop="8dp" />
android:orientation="vertical">
</androidx.constraintlayout.widget.ConstraintLayout>
<!-- Ignore ContentDescription because it is kind of meaningless to have TTS read out "App icon"
when it will inevitably read out the name of the app straight after. -->
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<ImageView
android:id="@+id/icon"
android:layout_width="match_parent"
android:layout_height="48dip"
android:layout_marginTop="8dp"
android:scaleType="fitCenter"
android:transitionName="@string/transition_app_item_icon"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription"
tools:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:ellipsize="end"
android:maxLines="3"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/icon"
tools:text="F-Droid An application summary which takes up too much space and must ellipsize" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>

@ -1,55 +1,61 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="org.fdroid.fdroid.views.AppDetailsActivity"
android:background="?attr/appDetailsBackground"
android:id="@+id/rootCoordinator">
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="org.fdroid.fdroid.views.AppDetailsActivity"
android:background="?attr/appDetailsBackground"
android:fitsSystemWindows="true"
android:id="@+id/rootCoordinator">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="@dimen/app_bar_height"
android:fitsSystemWindows="true"
android:theme="@style/AppThemeLight.AppBarOverlay"
app:layout_behavior="org.fdroid.fdroid.views.FixAppBarLayoutBehavior">
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="@dimen/app_bar_height"
android:fitsSystemWindows="true"
app:layout_behavior="org.fdroid.fdroid.views.FixAppBarLayoutBehavior">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:expandedTitleMarginTop="24dp">
<org.fdroid.fdroid.views.apps.FeatureImage
android:id="@+id/feature_graphic"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:fitsSystemWindows="true"
app:layout_collapseMode="parallax" />
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
app:contentScrim="?attr/colorPrimary"
app:statusBarScrim="?attr/colorPrimaryVariant"
app:expandedTitleTextAppearance="@style/TextAppearance.App.CollapsingToolbar.Expanded"
app:collapsedTitleTextAppearance="@style/TextAppearance.App.CollapsingToolbar.Collapsed"
app:expandedTitleMarginTop="24dp">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/AppThemeLight.PopupOverlay" />
<org.fdroid.fdroid.views.apps.FeatureImage
android:id="@+id/feature_graphic"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:fitsSystemWindows="true"
app:layout_collapseMode="parallax" />
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:navigationIcon="@drawable/ic_back"
android:background="@android:color/transparent"
app:layout_collapseMode="pin"
style="@style/Widget.MaterialComponents.Toolbar.PrimarySurface" />
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvDetails"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
app:layoutManager="LinearLayoutManager"
tools:context="org.fdroid.fdroid.views.AppDetailsActivity"
tools:showIn="@layout/app_details2" />
android:id="@+id/rvDetails"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
app:layoutManager="LinearLayoutManager"
tools:context="org.fdroid.fdroid.views.AppDetailsActivity"
tools:showIn="@layout/app_details2" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

@ -108,7 +108,7 @@
android:contentDescription="@string/downloading"
android:focusable="true"
android:text="@string/downloading"
android:textAppearance="@style/TextAppearance.AppCompat.Small" />
android:textAppearance="@style/TextAppearance.MaterialComponents.Caption" />
<TextView
android:id="@+id/progress_percent"
@ -116,7 +116,7 @@
android:layout_height="wrap_content"
android:layout_toStartOf="@id/progress_cancel"
android:layout_toLeftOf="@id/progress_cancel"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textAppearance="@style/TextAppearance.MaterialComponents.Caption"
tools:text="500%" />
<ProgressBar
@ -142,7 +142,7 @@
android:paddingBottom="4dp"
android:visibility="visible">
<androidx.appcompat.widget.AppCompatButton
<com.google.android.material.button.MaterialButton
android:id="@+id/secondaryButtonView"
style="@style/DetailsSecondaryButtonStyle"
android:layout_width="wrap_content"
@ -151,7 +151,7 @@
android:ellipsize="marquee"
tools:text="Uninstall" />
<androidx.appcompat.widget.AppCompatButton
<com.google.android.material.button.MaterialButton
android:id="@+id/primaryButtonView"
style="@style/DetailsPrimaryButtonStyle"
android:layout_width="wrap_content"

@ -30,17 +30,8 @@
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:background="?attr/selectableItemBackground"
android:paddingLeft="18dp"
android:paddingStart="18dp"
android:paddingRight="18dp"
android:paddingEnd="18dp"
android:paddingTop="24dp"
android:paddingBottom="12dp"
android:textSize="14sp"
style="@style/Widget.MaterialComponents.Button.TextButton"
android:textAllCaps="true"
android:textColor="@color/fdroid_blue"
tools:layout_editor_absoluteX="268dp" />
<FrameLayout

@ -1,42 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:theme="?attr/actionBarTheme" />
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/topAppBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
app:liftOnScroll="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:title="@string/installed_apps__activity_title"
app:navigationIcon="@drawable/ic_back"
style="@style/Widget.MaterialComponents.Toolbar.PrimarySurface" />
</com.google.android.material.appbar.AppBarLayout>
<TextView
android:id="@+id/empty_state"
style="@style/AppListEmptyText"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="@string/empty_installed_app_list"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar" />
android:id="@+id/empty_state"
style="@style/AppListEmptyText"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="@string/empty_installed_app_list"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/topAppBarLayout" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/app_list"
android:layout_width="0dp"
android:layout_height="0dp"
android:scrollbars="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar"
tools:listitem="@layout/installed_app_list_item" />
android:id="@+id/app_list"
android:layout_width="0dp"
android:layout_height="0dp"
android:scrollbars="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/topAppBarLayout"
tools:listitem="@layout/installed_app_list_item" />
<!--
Commented out until the long press functionality is implemented.

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"

@ -5,7 +5,8 @@
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:layout_width="match_parent"

@ -1,24 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:title="@string/menu_manage"
app:theme="?attr/actionBarTheme" />
<ListView
android:id="@+id/list"
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
tools:listitem="@layout/repo_item" />
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
app:liftOnScroll="true">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:title="@string/menu_manage"
app:navigationIcon="@drawable/ic_back"
style="@style/Widget.MaterialComponents.Toolbar.PrimarySurface" />
</com.google.android.material.appbar.AppBarLayout>
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
tools:listitem="@layout/repo_item" />
</LinearLayout>

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
xmlns:app="http://schemas.android.com/apk/res-auto"
android:fitsSystemWindows="true">
<item
android:id="@+id/action_share"

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<transitionSet>
<changeImageTransform />
<changeBounds />
<changeTransform />
<changeClipBounds />
</transitionSet>

@ -280,7 +280,6 @@
<string name="keep_forever">Vir ewig</string>
<string name="theme_light">Lig</string>
<string name="theme_dark">Donker</string>
<string name="theme_night">Nag</string>
<string name="crash_dialog_title">F-Droid het ineengestort</string>
<string name="crash_dialog_text">\'N Onverwagse fout het voorgekom wat die program laat stop het.
Wil jy \'n e-pos met die besonderhede stuur om die probleem te help oplos?

@ -260,7 +260,6 @@
<string name="keep_forever">إلى الأبد</string>
<string name="theme_light">فاتحة</string>
<string name="theme_dark">داكنة</string>
<string name="theme_night">ليلية</string>
<string name="crash_dialog_title">لقد تعطل اف-درويد</string>
<string name="crash_dialog_text">حدث خطأ غير متوقع أجبَر التطبيق على التوقف. هل ترغب في إرسال بريد إلكتروني بالتفاصيل للمساعدة في حل المشكلة ؟</string>
<string name="crash_dialog_comment_prompt">يمكنك إضافة معلومات وتعليقات إضافية هنا:</string>

@ -227,7 +227,6 @@
<string name="more">Más</string>
<string name="less">Menos</string>
<string name="permissions">Permisos</string>
<string name="theme_night">Nueche</string>
<string name="menu_settings">Axustes</string>
<string name="login_title">Ríquese l\'autenticación</string>
<string name="login_name">Nome d\'usuariu</string>

@ -268,7 +268,6 @@
<string name="keep_forever">Заўсёды</string>
<string name="theme_light">Светлая</string>
<string name="theme_dark">Цёмная</string>
<string name="theme_night">Начная</string>
<string name="crash_dialog_title">F-Droid даў хібу</string>
<string name="crash_dialog_text">Узнікла нечаканая памылка, што прывяла да аварыйнага спынення праграмы. Хочаце адправіць электронны ліст з падрабязнасцямі, каб дапамагчы выправіць гэтую праблему\?</string>
<string name="crash_dialog_comment_prompt">Можаце ўвясці дадатковую інфармацыю і каментары сюды:</string>

@ -218,7 +218,6 @@
<string name="swap_confirm_connect">Желаете ли да получите приложения от %1$s?</string>
<string name="swap_qr_isnt_for_swap">Сканираният QR код не е код за размяна.</string>
<string name="status_processing_xml_percent">Обработване на %2$s / %3$s (%4$d%%) от %1$s</string>
<string name="theme_night">Нощна</string>
<string name="repo_added">Хранилището %1$s е записано.</string>
<string name="repo_searching_address">Търсене на хранилище в\n%1$s</string>
<string name="unsigned">Неподписано</string>

@ -6,7 +6,6 @@
<string name="yes">হ্যাঁ</string>
<string name="no">না</string>
<string name="back">ফিরে</string>
<string name="theme_night">রাত</string>
<string name="theme_dark">অন্ধকার</string>
<string name="theme_light">হালকা</string>
<string name="status_inserting_apps">অ্যাপের বিবরণ সংরক্ষণ করা হচ্ছে</string>

@ -86,7 +86,6 @@
<string name="category_Time">সময়</string>
<string name="category_Security">নিরাপত্তা</string>
<string name="category_Navigation">দিক নির্ণয়</string>
<string name="theme_night">রাত</string>
<string name="theme_dark">অন্ধকার</string>
<string name="theme_light">হালকা</string>
<string name="swap_send_fdroid">এফ-ড্রয়েড পাঠান</string>

@ -357,7 +357,6 @@
<string name="status_inserting_apps">མཉེས་ཆས་ཞིབ་ཕྲ་ཉར་ཚགས་བྱེད་བཞིན་པ།</string>
<string name="theme_light">དཀར་མདངས།</string>
<string name="theme_dark">ནག་པོ།</string>
<string name="theme_night">མཚན་མོ།</string>
<string name="tts_category_name">སྡེ་ཚན་%1$s</string>
<string name="app_details__incompatible_mismatched_signature">སྒྲིག་བཅུག་བྱེད་པའི་ཐོན་རིམ་འདི་མིང་རྟགས་མཐུན་མ་སོང་།</string>
<string name="app_details__no_versions__show_incompat_versions">འདིར་ཐོན་རིམ་མི་མཐུན་པ་རྣམས་སྟོན་དགོས་ན། \"%1$s\" སྒྲིག་བཀོད་འདི་སྒོ་ཕྱེད།</string>

@ -180,7 +180,6 @@
<string name="interval_2w">Cerca actualitzacions cada dues setmanes</string>
<string name="theme_light">Clar</string>
<string name="theme_dark">Fosc</string>
<string name="theme_night">Nit</string>
<string name="newPerms">Nous</string>
<string name="allPerms">Tots</string>
<string name="perm_costs_money">Això us pot costar diners</string>

@ -227,7 +227,6 @@
<string name="interval_2w">Zjišťovat aktualizace každé 2 týdny</string>
<string name="theme_light">Světlý</string>
<string name="theme_dark">Tmavý</string>
<string name="theme_night">Noc</string>
<string name="system_install_denied_permissions">Privilegovaná oprávnění nebyla tomuto rozšíření udělena! Nahlašte
prosím jako chybu!
</string>

@ -346,7 +346,6 @@
<string name="keep_forever">Am byth</string>
<string name="theme_light">Golau</string>
<string name="theme_dark">Tywyll</string>
<string name="theme_night">Nos</string>
<string name="crash_dialog_title">Mae F-Droid wedi chwalu</string>
<string name="crash_dialog_text">Bu gwall annisgwyl a orfododd yr ap i stopio. Hoffet anfon neges e-bost gyda\'r manylion er mwyn trwsio\'r broblem\?</string>
<string name="crash_dialog_comment_prompt">Gellir ychwanegu gwybodaeth ychwanegol a sylwadau yma:</string>

@ -234,7 +234,6 @@
<string name="interval_2w">Søg efter opdateringer hver anden uge</string>
<string name="theme_light">Lys</string>
<string name="theme_dark">Mørk</string>
<string name="theme_night">Nat</string>
<string name="menu_email">E-mail forfatter</string>
<string name="antinonfreeassetslist">Denne app indeholder ikke-frit indhold</string>
<string name="empty_search_available_app_list">Ingen matchende apps tilgængelige.</string>

@ -238,7 +238,6 @@
<string name="download_error">Herunterladen fehlgeschlagen!</string>
<string name="perms_description_app">Bereitgestellt von %1$s.</string>
<string name="downloading">Herunterladen …</string>
<string name="theme_night">Nacht</string>
<string name="login_title">Legitimierung erforderlich</string>
<string name="login_name">Benutzername</string>
<string name="login_password">Passwort</string>

@ -236,7 +236,6 @@
<string name="interval_2w">Να γίνεται έλεγχος για ενημερώσεις κάθε 2 εβδομάδες</string>
<string name="theme_light">Φωτεινό</string>
<string name="theme_dark">Σκοτεινό</string>
<string name="theme_night">Νυχτερινό</string>
<string name="swap_nfc_title">Αγγίξτε για ανταλλαγή</string>
<string name="swap_nfc_description">Αν ο φίλος σας έχει το F-Droid και ενεργοποιημένο το NFC αγγίξτε μεταξύ τους τις
συσκευές σας.

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="theme_night">Night</string>
<string name="theme_dark">Dark</string>
<string name="theme_light">Light</string>
<string name="status_inserting_apps">Saving app details</string>

@ -248,7 +248,6 @@
<string name="interval_2w">Kontroli pri ĝisdatigoj ĉiu-2-semajne</string>
<string name="theme_light">Hela</string>
<string name="theme_dark">Malhela</string>
<string name="theme_night">Nokta</string>
<string name="crash_dialog_title">F-Droid kolapsis</string>
<string name="crash_dialog_text">Senatenda eraro okazis kaj devigis aplikaĵon halti. Ĉu vi volas retmesaĝi detalojn
por helpi ripari la eraron?

@ -420,7 +420,6 @@
<string name="keep_forever">Siempre</string>
<string name="theme_light">Claro</string>
<string name="theme_dark">Oscuro</string>
<string name="theme_night">Noche</string>
<string name="crash_dialog_comment_prompt">Podés añadir información extra y comentarios acá:</string>
<plurals name="notification_summary_more">
<item quantity="one">+%1$d más…</item>

@ -86,7 +86,6 @@
<string name="updates">Actualizaciones</string>
<string name="app_name">F-Droid</string>
<string name="notify">Mostrar actualizaciones disponibles</string>
<string name="theme_night">Noche</string>
<string name="theme_dark">Oscuro</string>
<string name="theme_light">Claro</string>
<string name="status_inserting_apps">Guardado Detalles de la Aplicacion</string>

@ -230,7 +230,6 @@
<string name="repo_details">Repositorio</string>
<string name="repo_url">Dirección</string>
<string name="download_error">¡Descarga fallida!</string>
<string name="theme_night">Noche</string>
<string name="system_install_denied_permissions">¡No se han concedido permisos de sistema a la extensión! ¡Por
favor, informa sobre este fallo!
</string>

@ -263,7 +263,6 @@
<string name="keep_forever">Igavesti</string>
<string name="theme_light">Hele</string>
<string name="theme_dark">Tume</string>
<string name="theme_night">Öö</string>
<string name="crash_dialog_title">F-Droidi tabas krahh</string>
<string name="crash_dialog_comment_prompt">Sa saad lisada täiendavat informatsiooni ja kommentaare siia:</string>
<string name="swap_join_same_wifi_desc">WiFi kaudu vahetamiseks peate olema samas võrgus. Kui sul puudub ligipääs

@ -246,7 +246,6 @@
\ndeskargatzen\n%1$s(e)tik
</string>
<string name="permissions">Baimenak</string>
<string name="theme_night">Gaua</string>
<string name="menu_settings">Ezarpenak</string>
<string name="update_auto_download">Deskargatu eguneraketak automatikoki</string>
<string name="update_auto_download_summary">Eguneraketak automatikoki deskargatzen dira eta berauek instalatzeko jakinarazten zaizu</string>

@ -203,7 +203,6 @@
<string name="interval_2w">بررسی هر ۲ هفته برای به‌روز رسانی‌ها</string>
<string name="theme_light">روشن</string>
<string name="theme_dark">تاریک</string>
<string name="theme_night">شب</string>
<string name="malformed_repo_uri">نادیده گرفتن نشانی اینترنتی مخزن ناهنجار: %s</string>
<string name="all_other_repos_fine">تمام مخزن‌های دیگر خطایی ایجاد نکردند.</string>
<string name="repo_not_yet_updated">این مخزن هنوز استفاده نشده است. برای دیدن برنامه هایی که فراهم می‌کند باید فعّالش کنید.</string>

@ -139,7 +139,6 @@
<string name="interval_1h">Tarkista päivitykset tunnin välein</string>
<string name="theme_light">Vaalea</string>
<string name="theme_dark">Tumma</string>
<string name="theme_night">Musta</string>
<string name="uninstall_confirm">Haluatko poistaa tämän sovelluksen?</string>
<string name="allPerms">Kaikki</string>
<string name="newPerms">Uusi</string>

@ -238,7 +238,6 @@
<string name="more">Plus</string>
<string name="less">Moins</string>
<string name="permissions">Autorisations</string>
<string name="theme_night">Nuit</string>
<string name="menu_settings">Paramètres</string>
<string name="login_title">Identification requise</string>
<string name="login_name">Nom d\'utilisateur</string>

@ -173,7 +173,6 @@
<string name="interval_2w">Procurar actualizacións cada dúas semanas</string>
<string name="theme_light">Claro</string>
<string name="theme_dark">Escuro</string>
<string name="theme_night">Noite</string>
<string name="unstable_updates_summary">Suxire actualizacións para versións inestábeis</string>
<string name="antiupstreamnonfreelist">O código fonte non é completamente libre</string>
<string name="proxy_host">Servidor proxy</string>

@ -234,7 +234,6 @@
<string name="permissions">הרשאות</string>
<string name="repo_details">מאגר</string>
<string name="repo_url">כתובת</string>
<string name="theme_night">לילה</string>
<string name="system_install_denied_permissions">ההרשאות המיוחדות לא הוענקו להרחבה! נא לדווח על באג!</string>
<string name="login_title">נדרש אימות</string>
<string name="login_name">שם משתמש</string>

@ -46,7 +46,6 @@
<string name="overwrite">ऊपर लिखना</string>
<string name="theme_light">रोशनी</string>
<string name="theme_dark">अंधेरा</string>
<string name="theme_night">रात्रि</string>
<string name="crash_dialog_title">F-Droid क्रैश हो गया है</string>
<string name="crash_dialog_text">एक अप्रत्याशित त्रुटि के कारन एप्लीकेशन बंद हो गयी है| क्या ईमेल भेज कर इस समाधान को सुलझाने में मदद करना चाहते हैं\?</string>
<string name="crash_dialog_comment_prompt">आप अन्य जानकारी और टिप्पणियाँ यहाँ लिख सकते हैं:</string>

@ -269,7 +269,6 @@
<string name="keep_forever">Zauvijek</string>
<string name="theme_light">Svijetla</string>
<string name="theme_dark">Tamna</string>
<string name="theme_night">Noćna</string>
<string name="crash_dialog_title">F-Droid se srušio</string>
<string name="crash_dialog_text">Dogodila se neočekivana greška, aplikacija je prisilno zaustavljena. Želite li poslati detalje kvara putem e-pošte da bismo ga popravili\?</string>
<string name="crash_dialog_comment_prompt">Možete dodati dodatne informacije i komentare ovdje:</string>

@ -178,7 +178,6 @@
<string name="interval_2w">Frissítések keresése kéthetente</string>
<string name="theme_light">Világos</string>
<string name="theme_dark">Sötét</string>
<string name="theme_night">Éjszakai</string>
<string name="crash_dialog_title">Az F-Droid összeomlott</string>
<string name="crash_dialog_text">Egy váratlan hiba következtében az alkalmazásnak le kellett állnia. Szeretné
elküldeni e-mailben a részleteket, hogy segítsen a probléma javításában?

@ -91,7 +91,6 @@
<string name="keep_forever">Ընդմիշտ</string>
<string name="theme_light">Բաց</string>
<string name="theme_dark">Մուգ</string>
<string name="theme_night">Գիշեր</string>
<string name="notification_title_single_update_available">Թարմացում է հասանելի</string>
<string name="notification_title_single_ready_to_install">Պատրաստ է տեղադրման</string>
<string name="notification_title_single_ready_to_install_update">Թարմացումը պատրաստ է տեղադրման</string>

@ -247,7 +247,6 @@
<string name="interval_2w">Periksa pembaruan setiap 2 minggu sekali</string>
<string name="theme_light">Terang</string>
<string name="theme_dark">Gelap</string>
<string name="theme_night">Malam</string>
<string name="crash_dialog_title">F-Droid telah gagal</string>
<string name="crash_dialog_text">Terjadi kesalahan yang tidak terduga yang memaksa aplikasi berhenti. Maukah mengirimkan detail melalui email untuk membantu memperbaiki masalah ini\?</string>
<string name="crash_dialog_comment_prompt">Anda bisa menambahkan informasi ekstra dan komentar di sini:</string>

@ -208,7 +208,6 @@
<string name="keep_forever">Að eilífu</string>
<string name="theme_light">Ljóst</string>
<string name="theme_dark">Dökkt</string>
<string name="theme_night">Næturhamur</string>
<string name="crash_dialog_title">F-Droid hrundi</string>
<string name="crash_dialog_comment_prompt">Þú getur bætt hér við aukaupplýsingum og athugasemdum:</string>
<string name="unstable_updates_summary">Stinga upp á uppfærslum í óstöðugar útgáfur</string>

@ -195,7 +195,6 @@
</string>
<string name="theme_light">Chiaro</string>
<string name="theme_dark">Scuro</string>
<string name="theme_night">Notte</string>
<string name="permissions">Autorizzazioni</string>
<string name="unstable_updates_summary">Suggerisci aggiornamenti a versioni non stabili</string>
<string name="login_title">Autenticazione richiesta</string>

@ -229,7 +229,6 @@
\n%2$s
\n%1$sから</string>
<string name="permissions">権限</string>
<string name="theme_night">ナイト</string>
<string name="menu_settings">設定</string>
<string name="login_title">認証が必要です</string>
<string name="login_name">ユーザー名</string>

@ -147,7 +147,6 @@
<string name="proxy_host">Asenneftaɣ Apṛuksi</string>
<string name="proxy_port">Tabburt n upṛuksi</string>
<string name="status_inserting_apps">Rnu tazmilt i usnas</string>
<string name="theme_night">Iḍ</string>
<string name="app_name">F-Droid</string>
<string name="menu_uninstall">Kkes</string>
<string name="preference_manage_installed_apps">Asefrak n isnasen ibedden</string>

@ -5,7 +5,6 @@
<string name="notification_action_install">ಸ್ಥಾಪಿಸಿ</string>
<string name="notification_title_summary_install_error">ಸ್ಥಾಪನೆ ವಿಫಲವಾಗಿದೆ</string>
<string name="notification_title_summary_installing">ಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ</string>
<string name="theme_night">ರಾತ್ರಿ</string>
<string name="keep_year">1 ವರ್ಷ</string>
<string name="keep_month">1 ತಿಂಗಳು</string>
<string name="keep_hour">1 ಗಂಟೆ</string>

@ -237,7 +237,6 @@
<string name="interval_2w">2주마다 업데이트를 확인</string>
<string name="theme_light">밝음</string>
<string name="theme_dark">어두움</string>
<string name="theme_night">야간</string>
<string name="update_auto_download">업데이트를 자동으로 얻기</string>
<string name="update_auto_download_summary">업데이트를 자동으로 다운로드하고 업데이트의 설치를 알려줍니다</string>
<string name="repo_provider">저장소: %s</string>

@ -340,7 +340,6 @@
<string name="status_processing_xml_percent">Apdorojama %2$s / %3$s (%4$d%%) iš %1$s</string>
<string name="theme_dark">Tamsus</string>
<string name="theme_light">Šviesus</string>
<string name="theme_night">Naktinis</string>
<string name="enable_proxy_summary">Naudoti HTTP Proxy visiems ryšiams</string>
<string name="malformed_repo_uri">Nepaisoma netaisyklingo saugyklos URI: %s</string>
<string name="repo_add_mirror">Pridėti tinklavietę</string>

@ -157,7 +157,6 @@
<string name="menu_add_repo">Ново складиште</string>
<string name="menu_manage">Складишта</string>
<string name="back">Назад</string>
<string name="theme_night">Ноќна</string>
<string name="theme_dark">Темна</string>
<string name="theme_light">Светла</string>
<string name="crash_dialog_comment_prompt">Можете да додадете дополнителни информации и коментари овде:</string>

Some files were not shown because too many files have changed in this diff Show More