Initial support for third-party dispensers

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2024-05-21 21:06:49 +05:30
parent 9004aa6df8
commit 453f6f24c2
21 changed files with 434 additions and 31 deletions

View File

@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" />
</vector>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M300,240Q275,240 257.5,257.5Q240,275 240,300Q240,325 257.5,342.5Q275,360 300,360Q325,360 342.5,342.5Q360,325 360,300Q360,275 342.5,257.5Q325,240 300,240ZM300,640Q275,640 257.5,657.5Q240,675 240,700Q240,725 257.5,742.5Q275,760 300,760Q325,760 342.5,742.5Q360,725 360,700Q360,675 342.5,657.5Q325,640 300,640ZM160,120L800,120Q817,120 828.5,131.5Q840,143 840,160L840,440Q840,457 828.5,468.5Q817,480 800,480L160,480Q143,480 131.5,468.5Q120,457 120,440L120,160Q120,143 131.5,131.5Q143,120 160,120ZM200,200L200,400L760,400L760,200L200,200ZM160,520L800,520Q817,520 828.5,531.5Q840,543 840,560L840,840Q840,857 828.5,868.5Q817,880 800,880L160,880Q143,880 131.5,868.5Q120,857 120,840L120,560Q120,543 131.5,531.5Q143,520 160,520ZM200,600L200,800L760,800L760,600L200,600ZM200,200L200,200L200,400L200,400L200,200ZM200,600L200,600L200,800L200,800L200,600Z"/>
</vector>

View File

@@ -76,11 +76,12 @@
tools:text="Sign in first" />
</RelativeLayout>
<RelativeLayout
<LinearLayout
android:id="@+id/layout_action"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical"
android:padding="@dimen/padding_large"
android:visibility="invisible"
@@ -91,36 +92,29 @@
style="@style/AuroraTextStyle.Line1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@id/btn_google"
android:layout_centerHorizontal="true"
android:layout_marginBottom="@dimen/margin_normal"
android:text="@string/account_login_using"
android:textAlignment="center" />
android:text="@string/account_login_using" />
<com.aurora.store.view.custom.layouts.button.StateButton
android:id="@+id/btn_google"
android:layout_width="@dimen/width_button"
android:layout_height="wrap_content"
android:layout_above="@id/btn_anonymous"
android:layout_centerHorizontal="true"
app:btnStateIcon="@drawable/ic_google"
app:btnStateText="@string/account_google" />
<com.aurora.store.view.custom.layouts.button.StateButton
android:id="@+id/btn_anonymous"
android:visibility="gone"
android:layout_width="@dimen/width_button"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_centerHorizontal="true"
app:btnStateIcon="@drawable/ic_anonymous"
app:btnStateText="@string/account_anonymous" />
<com.aurora.store.view.custom.layouts.button.StateButton
android:visibility="gone"
android:id="@+id/btn_anonymous_insecure"
android:layout_width="@dimen/width_button"
android:layout_height="wrap_content"
android:layout_below="@id/btn_anonymous"
android:layout_centerHorizontal="true"
app:btnStateIcon="@drawable/ic_anonymous"
app:btnStateText="@string/account_anonymous_insecure" />
@@ -129,11 +123,9 @@
style="@style/AuroraTextStyle.Line3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/margin_small"
android:textAlignment="center"
tools:text="Version 4.0.1" />
</RelativeLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.textfield.TextInputLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textInputLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="@dimen/padding_large"
android:paddingTop="@dimen/padding_normal">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/textInputEditText"
style="@style/Widget.Material3.TextInputEditText.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/add_dispenser_hint" />
</com.google.android.material.textfield.TextInputLayout>

View File

@@ -0,0 +1,47 @@
<?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=".view.ui.dispenser.DispenserFragment">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:theme="?attr/actionBarTheme"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navigationIcon="@drawable/ic_arrow_back"
app:title="@string/pref_dispenser_title" />
<com.airbnb.epoxy.EpoxyRecyclerView
android:id="@+id/epoxy_recycler"
android:layout_width="match_parent"
android:layout_height="0dp"
android:clipToPadding="false"
android:overScrollMode="never"
android:padding="@dimen/padding_normal"
android:scrollbars="none"
app:itemSpacing="@dimen/margin_small"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar"
tools:listitem="@layout/view_dispenser" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/add_fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/margin_large"
android:contentDescription="@string/action_search"
app:backgroundTint="?colorAccent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:srcCompat="@drawable/ic_add"
app:tint="@color/colorWhite" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -70,12 +70,12 @@
tools:text="Sign in first" />
</RelativeLayout>
<RelativeLayout
<LinearLayout
android:id="@+id/layout_action"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center_horizontal|center_vertical"
android:gravity="center"
android:orientation="vertical"
android:padding="@dimen/padding_large"
android:visibility="invisible"
@@ -86,17 +86,13 @@
style="@style/AuroraTextStyle.Line1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginBottom="@dimen/margin_normal"
android:text="@string/account_login_using"
android:textAlignment="center" />
android:text="@string/account_login_using" />
<com.aurora.store.view.custom.layouts.button.StateButton
android:id="@+id/btn_google"
android:layout_width="@dimen/width_button"
android:layout_height="wrap_content"
android:layout_below="@id/txt_action"
android:layout_centerHorizontal="true"
app:btnStateIcon="@drawable/ic_google"
app:btnStateText="@string/account_google" />
@@ -104,8 +100,7 @@
android:id="@+id/btn_anonymous"
android:layout_width="@dimen/width_button"
android:layout_height="wrap_content"
android:layout_below="@id/btn_google"
android:layout_centerHorizontal="true"
android:visibility="gone"
app:btnStateIcon="@drawable/ic_anonymous"
app:btnStateText="@string/account_anonymous" />
@@ -113,8 +108,7 @@
android:id="@+id/btn_anonymous_insecure"
android:layout_width="@dimen/width_button"
android:layout_height="wrap_content"
android:layout_below="@id/btn_anonymous"
android:layout_centerHorizontal="true"
android:visibility="gone"
app:btnStateIcon="@drawable/ic_anonymous"
app:btnStateText="@string/account_anonymous_insecure" />
@@ -123,10 +117,8 @@
style="@style/AuroraTextStyle.Line3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/margin_small"
android:textAlignment="center"
tools:text="Version 4.0.1" />
</RelativeLayout>
</LinearLayout>
</LinearLayout>

View File

@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:background="@drawable/bg_outlined_padded"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/url"
style="@style/AuroraTextStyle.Subtitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toStartOf="@id/btn_action"
android:drawableStart="@drawable/ic_server"
android:drawablePadding="@dimen/padding_small"
tools:text="https://auroraoss.com/api/auth" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_action"
style="@style/Widget.Material3.Button.TextButton.Dialog.Flush"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginStart="@dimen/margin_small"
android:text="@string/remove" />
</RelativeLayout>

View File

@@ -394,6 +394,15 @@
android:name="com.aurora.store.view.ui.preferences.InstallerFragment"
android:label="InstallerFragment"
tools:layout="@layout/fragment_installer"/>
<fragment
android:id="@+id/dispenserFragment"
android:name="com.aurora.store.view.ui.dispenser.DispenserFragment"
android:label="DispenserFragment"
tools:layout="@layout/fragment_dispenser" >
<action
android:id="@+id/action_dispenserFragment_to_removeDispenserDialog"
app:destination="@id/removeDispenserDialog" />
</fragment>
<dialog
android:id="@+id/appMenuSheet"
android:name="com.aurora.store.view.ui.sheets.AppMenuSheet"
@@ -479,4 +488,15 @@
android:id="@+id/moreDialogFragment"
android:name="com.aurora.store.view.ui.commons.MoreDialogFragment"
android:label="MoreDialogFragment" />
<dialog
android:id="@+id/inputDispenserDialog"
android:name="com.aurora.store.view.ui.dispenser.InputDispenserDialog"
android:label="@string/add_dispenser_title" />
<dialog
android:id="@+id/removeDispenserDialog"
android:name="com.aurora.store.view.ui.dispenser.RemoveDispenserDialog"
android:label="@string/remove_dispenser_title" >
<argument android:name="url"
app:argType="string" />
</dialog>
</navigation>

View File

@@ -436,4 +436,18 @@
<string name="pref_clear_device_owner_title">Clear device owner</string>
<string name="pref_clear_device_owner_summary">Removes Aurora Store as the device owner app</string>
<string name="pref_clear_device_owner_desc">This will revoke session installer\'s permission to silently install app. Proceed with clearing device ownership?</string>
<!-- DispenserFragment -->
<string name="pref_dispenser_title">Manage dispensers</string>
<string name="pref_dispenser_summary">View and manage token dispensers for anonymous logins</string>
<!-- DialogDispenserInput-->
<string name="add_dispenser_title">Add dispenser</string>
<string name="add_dispenser_summary">Add a token dispenser to Aurora Store. Token dispensers provide account credentials to Aurora Store for logging in anonymously.</string>
<string name="add_dispenser_error">Invalid URL</string>
<string name="add_dispenser_hint">Dispenser URL</string>
<string name="remove_dispenser_title">Remove dispenser</string>
<string name="remove_dispenser_summary">Do you wish to remove the dispenser \"<xliff:g id="url">%1$s</xliff:g>\"?</string>
<string name="add">Add</string>
<string name="remove">Remove</string>
</resources>

View File

@@ -19,6 +19,13 @@
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
<Preference
app:allowDividerBelow="true"
app:iconSpaceReserved="false"
app:key="PREFERENCE_DISPENSER_URLS"
app:summary="@string/pref_dispenser_summary"
app:title="@string/pref_dispenser_title" />
<PreferenceCategory
app:allowDividerAbove="true"
app:allowDividerBelow="true"