From 872b288419a28af588557cbd108cc4a6a799adea Mon Sep 17 00:00:00 2001 From: tonymanou Date: Mon, 25 Feb 2019 22:16:38 +0100 Subject: [PATCH 001/355] Fix non-final lock --- .../typeblog/shelter/util/CrossProfileDocumentsProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/net/typeblog/shelter/util/CrossProfileDocumentsProvider.java b/app/src/main/java/net/typeblog/shelter/util/CrossProfileDocumentsProvider.java index aba2961..5e761ec 100644 --- a/app/src/main/java/net/typeblog/shelter/util/CrossProfileDocumentsProvider.java +++ b/app/src/main/java/net/typeblog/shelter/util/CrossProfileDocumentsProvider.java @@ -50,7 +50,7 @@ public class CrossProfileDocumentsProvider extends DocumentsProvider { // We just release the service when idle, thus enabling the // system to release memory private Runnable mReleaseServiceTask = this::releaseService; - private Object mLock = new Object(); + private final Object mLock = new Object(); private void doBindService() { // Call DummyActivity on the other side to bind the service for us From cdcd9844a5ce5184fe3b2a7718265ef475002048 Mon Sep 17 00:00:00 2001 From: tonymanou Date: Tue, 26 Feb 2019 00:19:56 +0100 Subject: [PATCH 002/355] No need to store root view in viewholder --- .../typeblog/shelter/ui/AppListAdapter.java | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/net/typeblog/shelter/ui/AppListAdapter.java b/app/src/main/java/net/typeblog/shelter/ui/AppListAdapter.java index a4a514b..a019d7f 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/AppListAdapter.java +++ b/app/src/main/java/net/typeblog/shelter/ui/AppListAdapter.java @@ -29,16 +29,14 @@ import java.util.stream.Collectors; public class AppListAdapter extends RecyclerView.Adapter { class ViewHolder extends RecyclerView.ViewHolder { - private ViewGroup mView; private ImageView mIcon; private TextView mTitle; private TextView mPackage; // This text view shows the order of all selected items private TextView mSelectOrder; int mIndex = -1; - ViewHolder(ViewGroup view) { + ViewHolder(View view) { super(view); - mView = view; mIcon = view.findViewById(R.id.list_app_icon); mTitle = view.findViewById(R.id.list_app_title); mPackage = view.findViewById(R.id.list_app_package); @@ -57,7 +55,7 @@ public class AppListAdapter extends RecyclerView.Adapter Date: Tue, 26 Feb 2019 22:34:09 +0100 Subject: [PATCH 003/355] Use our context's layout inflater --- app/src/main/java/net/typeblog/shelter/ui/AppListAdapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/net/typeblog/shelter/ui/AppListAdapter.java b/app/src/main/java/net/typeblog/shelter/ui/AppListAdapter.java index a019d7f..096aad0 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/AppListAdapter.java +++ b/app/src/main/java/net/typeblog/shelter/ui/AppListAdapter.java @@ -325,7 +325,7 @@ public class AppListAdapter extends RecyclerView.Adapter Date: Tue, 26 Feb 2019 22:31:14 +0100 Subject: [PATCH 004/355] Fix string comparison --- app/src/main/java/net/typeblog/shelter/ui/AppListFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/net/typeblog/shelter/ui/AppListFragment.java b/app/src/main/java/net/typeblog/shelter/ui/AppListFragment.java index 56fd315..84d4155 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/AppListFragment.java +++ b/app/src/main/java/net/typeblog/shelter/ui/AppListFragment.java @@ -98,7 +98,7 @@ public class AppListFragment extends BaseFragment { @Override public void onReceive(Context context, Intent intent) { String query = intent.getStringExtra("text"); - if (query == "") { + if ("".equals(query)) { // Consider empty query as null query = null; } From 60a8fdf960e409ba89e726741cee1a288264dbe1 Mon Sep 17 00:00:00 2001 From: tonymanou Date: Tue, 26 Feb 2019 22:32:51 +0100 Subject: [PATCH 005/355] Remove redundant things --- .../typeblog/shelter/util/CrossProfileDocumentsProvider.java | 4 ++-- app/src/main/java/net/typeblog/shelter/util/Utility.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/net/typeblog/shelter/util/CrossProfileDocumentsProvider.java b/app/src/main/java/net/typeblog/shelter/util/CrossProfileDocumentsProvider.java index 5e761ec..25a5b1a 100644 --- a/app/src/main/java/net/typeblog/shelter/util/CrossProfileDocumentsProvider.java +++ b/app/src/main/java/net/typeblog/shelter/util/CrossProfileDocumentsProvider.java @@ -137,7 +137,7 @@ public class CrossProfileDocumentsProvider extends DocumentsProvider { public Cursor queryDocument(String documentId, String[] projection) { ensureServiceBound(); final MatrixCursor result = new MatrixCursor(projection == null ? DEFAULT_DOCUMENT_PROJECTION : projection); - Map fileInfo = null; + Map fileInfo; try { fileInfo = mService.loadFileMeta(documentId); } catch (RemoteException e) { @@ -150,7 +150,7 @@ public class CrossProfileDocumentsProvider extends DocumentsProvider { @Override public Cursor queryChildDocuments(String parentDocumentId, String[] projection, String sortOrder) { ensureServiceBound(); - List> files = null; + List> files; try { files = mService.loadFiles(parentDocumentId); } catch (RemoteException e) { diff --git a/app/src/main/java/net/typeblog/shelter/util/Utility.java b/app/src/main/java/net/typeblog/shelter/util/Utility.java index b36585b..3d3cf7a 100644 --- a/app/src/main/java/net/typeblog/shelter/util/Utility.java +++ b/app/src/main/java/net/typeblog/shelter/util/Utility.java @@ -353,7 +353,7 @@ public class Utility { public static String getFileExtension(String filePath) { int index = filePath.lastIndexOf("."); if (index > 0) { - return filePath.substring(index + 1, filePath.length()); + return filePath.substring(index + 1); } else { return null; } From ba46ea599b20391ce30cc93a14876cd93acaed31 Mon Sep 17 00:00:00 2001 From: tonymanou Date: Tue, 26 Feb 2019 22:33:15 +0100 Subject: [PATCH 006/355] Make constants final --- .../java/net/typeblog/shelter/services/FreezeService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/net/typeblog/shelter/services/FreezeService.java b/app/src/main/java/net/typeblog/shelter/services/FreezeService.java index ced1c44..5d7502e 100644 --- a/app/src/main/java/net/typeblog/shelter/services/FreezeService.java +++ b/app/src/main/java/net/typeblog/shelter/services/FreezeService.java @@ -50,10 +50,10 @@ public class FreezeService extends Service { } // An app being inactive for this amount of time will be frozen - private static long APP_INACTIVE_TIMEOUT = 1000; + private static final long APP_INACTIVE_TIMEOUT = 1000; // Notification ID - private static int NOTIFICATION_ID = 0xe49c0; + private static final int NOTIFICATION_ID = 0xe49c0; // The actual receiver of the screen-off event private BroadcastReceiver mLockReceiver = new BroadcastReceiver() { From 0ca210a7d93021a811282423014d5d5d1f9f12de Mon Sep 17 00:00:00 2001 From: tonymanou Date: Tue, 26 Feb 2019 22:48:25 +0100 Subject: [PATCH 007/355] Generic values passed to AIDL are Serializable, not simple Object --- .../typeblog/shelter/services/FileShuttleService.java | 9 +++++---- .../shelter/util/CrossProfileDocumentsProvider.java | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/net/typeblog/shelter/services/FileShuttleService.java b/app/src/main/java/net/typeblog/shelter/services/FileShuttleService.java index a9753b6..5350e7a 100644 --- a/app/src/main/java/net/typeblog/shelter/services/FileShuttleService.java +++ b/app/src/main/java/net/typeblog/shelter/services/FileShuttleService.java @@ -26,6 +26,7 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; +import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -46,9 +47,9 @@ public class FileShuttleService extends Service { } @Override - public List loadFiles(String path) { + public List> loadFiles(String path) { resetSuicideTask(); - ArrayList ret = new ArrayList<>(); + ArrayList> ret = new ArrayList<>(); File f = new File(resolvePath(path)); if (f.listFiles() != null) { for (File child : f.listFiles()) { @@ -59,10 +60,10 @@ public class FileShuttleService extends Service { } @Override - public Map loadFileMeta(String path) { + public Map loadFileMeta(String path) { resetSuicideTask(); File f = new File(resolvePath(path)); - HashMap map = new HashMap<>(); + HashMap map = new HashMap<>(); map.put(DocumentsContract.Document.COLUMN_DOCUMENT_ID, f.getAbsolutePath()); map.put(DocumentsContract.Document.COLUMN_DISPLAY_NAME, f.getName()); map.put(DocumentsContract.Document.COLUMN_SIZE, f.length()); diff --git a/app/src/main/java/net/typeblog/shelter/util/CrossProfileDocumentsProvider.java b/app/src/main/java/net/typeblog/shelter/util/CrossProfileDocumentsProvider.java index 25a5b1a..3786f2b 100644 --- a/app/src/main/java/net/typeblog/shelter/util/CrossProfileDocumentsProvider.java +++ b/app/src/main/java/net/typeblog/shelter/util/CrossProfileDocumentsProvider.java @@ -22,6 +22,7 @@ import net.typeblog.shelter.services.IFileShuttleService; import net.typeblog.shelter.services.IFileShuttleServiceCallback; import net.typeblog.shelter.ui.DummyActivity; +import java.io.Serializable; import java.util.List; import java.util.Map; @@ -137,7 +138,7 @@ public class CrossProfileDocumentsProvider extends DocumentsProvider { public Cursor queryDocument(String documentId, String[] projection) { ensureServiceBound(); final MatrixCursor result = new MatrixCursor(projection == null ? DEFAULT_DOCUMENT_PROJECTION : projection); - Map fileInfo; + Map fileInfo; try { fileInfo = mService.loadFileMeta(documentId); } catch (RemoteException e) { @@ -150,7 +151,7 @@ public class CrossProfileDocumentsProvider extends DocumentsProvider { @Override public Cursor queryChildDocuments(String parentDocumentId, String[] projection, String sortOrder) { ensureServiceBound(); - List> files; + List> files; try { files = mService.loadFiles(parentDocumentId); } catch (RemoteException e) { @@ -161,7 +162,7 @@ public class CrossProfileDocumentsProvider extends DocumentsProvider { result.setNotificationUri(getContext().getContentResolver(), DocumentsContract.buildDocumentUri(AUTHORITY, parentDocumentId)); - for (Map file : files) { + for (Map file : files) { includeFile(result, file); } return result; @@ -223,7 +224,7 @@ public class CrossProfileDocumentsProvider extends DocumentsProvider { } } - private void includeFile(MatrixCursor cursor, Map fileInfo) { + private void includeFile(MatrixCursor cursor, Map fileInfo) { final MatrixCursor.RowBuilder row = cursor.newRow(); for (String col : DEFAULT_DOCUMENT_PROJECTION) { row.add(col, fileInfo.get(col)); From 7aa0df0c861dcef4174cd7d9cb233dcc7e94b3ca Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 10 Sep 2019 10:42:46 +0800 Subject: [PATCH 008/355] .idea: whatever Android Studio decided to change --- .idea/codeStyles/Project.xml | 66 ------------------------------------ .idea/encodings.xml | 4 +++ 2 files changed, 4 insertions(+), 66 deletions(-) create mode 100644 .idea/encodings.xml diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 70ad957..c3088db 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -1,72 +1,6 @@ - - + diff --git a/app/build.gradle b/app/build.gradle index 78db556..a5632f4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -36,14 +36,14 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.legacy:legacy-support-core-ui:1.0.0' - implementation 'androidx.fragment:fragment:1.2.5' + implementation 'androidx.fragment:fragment:1.3.1' implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.preference:preference:1.1.1' - implementation 'androidx.constraintlayout:constraintlayout:2.0.1' - implementation 'com.google.android.material:material:1.2.1' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' + implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0' implementation 'mobi.upod:time-duration-picker:1.1.3' testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.3.0-rc01' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0-rc01' + androidTestImplementation 'androidx.test:runner:1.4.0-alpha04' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0-alpha04' } diff --git a/build.gradle b/build.gradle index 2deb66d..98518ee 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:4.0.1' + classpath 'com.android.tools.build:gradle:4.1.2' // NOTE: Do not place your application dependencies here; they belong diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 56f041a..e48320d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jun 22 08:55:56 CST 2020 +#Sat Mar 13 15:41:46 CST 2021 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip From a64bb7910ea377d9b8e79304ad99b5090006133e Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 13 Mar 2021 16:01:44 +0800 Subject: [PATCH 088/355] UX: make it clear that the user should expect a notification on setup --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a95a5dc..86a97af 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -76,7 +76,7 @@ You have to grant Device Admin permission for Shelter to work. Please try again. - Please wait while we prepare Shelter profile for you … + Shelter is still being set up. You should be seeing a notification soon from Shelter, which you must click on to finish the setup process. If you do not see the notification, please disable Do Not Disturb mode and try again. Shelter setup complete. Now restarting Shelter. If Shelter didn\'t start automatically, you may launch it again from your launcher. Permission is denied or Unsupported device Work profile not found. Please restart the app to re-provision the profile. From ff91bf42efeb64747f569d2cb57a5dda19b87a75 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 13 Mar 2021 16:22:20 +0800 Subject: [PATCH 089/355] refactor: switch to ViewPager2 * ViewPager is now deprecated --- .../net/typeblog/shelter/ui/MainActivity.java | 47 +++++++++---------- app/src/main/res/layout/activity_main.xml | 2 +- 2 files changed, 22 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java index f8fe67f..a2eb52e 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java @@ -15,17 +15,18 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.widget.Toast; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.SearchView; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; import androidx.localbroadcastmanager.content.LocalBroadcastManager; -import androidx.viewpager.widget.ViewPager; +import androidx.viewpager2.adapter.FragmentStateAdapter; +import androidx.viewpager2.widget.ViewPager2; import com.google.android.material.tabs.TabLayout; +import com.google.android.material.tabs.TabLayoutMediator; import net.typeblog.shelter.R; import net.typeblog.shelter.ShelterApplication; @@ -64,7 +65,7 @@ public class MainActivity extends AppCompatActivity { private IShelterService mServiceWork = null; // Views - private ViewPager mPager = null; + private ViewPager2 mPager = null; private TabLayout mTabs = null; // Show all applications or not @@ -211,8 +212,13 @@ public class MainActivity extends AppCompatActivity { // Initialize the ViewPager and the tab // All the remaining work will be done in the fragments - mPager.setAdapter(new AppListFragmentAdapter(getSupportFragmentManager())); - mTabs.setupWithViewPager(mPager); + mPager.setAdapter(new AppListFragmentStateAdapter()); + String[] pageTitles = new String[]{ + getString(R.string.fragment_profile_main), + getString(R.string.fragment_profile_work) + }; + new TabLayoutMediator(mTabs, mPager, (tab, position) -> + tab.setText(pageTitles[position])).attach(); } private boolean isWorkProfileAvailable() { @@ -510,37 +516,26 @@ public class MainActivity extends AppCompatActivity { } } - private class AppListFragmentAdapter extends FragmentPagerAdapter { - AppListFragmentAdapter(FragmentManager fm) { - super(fm); + private class AppListFragmentStateAdapter extends FragmentStateAdapter { + AppListFragmentStateAdapter() { + super(MainActivity.this); } + @NonNull @Override - public int getCount() { - return 2; - } - - @Override - public Fragment getItem(int i) { - if (i == 0) { + public Fragment createFragment(int position) { + if (position == 0) { return AppListFragment.newInstance(mServiceMain, false); - } else if (i == 1) { + } else if (position == 1) { return AppListFragment.newInstance(mServiceWork, true); } else { return null; } } - @Nullable @Override - public CharSequence getPageTitle(int i) { - if (i == 0) { - return getString(R.string.fragment_profile_main); - } else if (i == 1) { - return getString(R.string.fragment_profile_work); - } else { - return null; - } + public int getItemCount() { + return 2; } } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 347ec1c..c639971 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -30,7 +30,7 @@ - Date: Sat, 13 Mar 2021 16:27:05 +0800 Subject: [PATCH 090/355] refactor: MainActivity: move mPager and mTabs to local * while we are at it, move FragmentStateAdaptor to local too. --- .../net/typeblog/shelter/ui/MainActivity.java | 52 ++++++++----------- 1 file changed, 21 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java index a2eb52e..fb3f8f9 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java @@ -64,10 +64,6 @@ public class MainActivity extends AppCompatActivity { private IShelterService mServiceMain = null; private IShelterService mServiceWork = null; - // Views - private ViewPager2 mPager = null; - private TabLayout mTabs = null; - // Show all applications or not // default to false boolean mShowAll = false; @@ -207,17 +203,34 @@ public class MainActivity extends AppCompatActivity { private void buildView() { // Finally we can build the view // Find all the views - mPager = findViewById(R.id.main_pager); - mTabs = findViewById(R.id.main_tablayout); + ViewPager2 pager = findViewById(R.id.main_pager); + TabLayout tabs = findViewById(R.id.main_tablayout); // Initialize the ViewPager and the tab // All the remaining work will be done in the fragments - mPager.setAdapter(new AppListFragmentStateAdapter()); + pager.setAdapter(new FragmentStateAdapter(this) { + @NonNull + @Override + public Fragment createFragment(int position) { + if (position == 0) { + return AppListFragment.newInstance(mServiceMain, false); + } else if (position == 1) { + return AppListFragment.newInstance(mServiceWork, true); + } else { + return null; + } + } + + @Override + public int getItemCount() { + return 2; + } + }); String[] pageTitles = new String[]{ getString(R.string.fragment_profile_main), getString(R.string.fragment_profile_work) }; - new TabLayoutMediator(mTabs, mPager, (tab, position) -> + new TabLayoutMediator(tabs, pager, (tab, position) -> tab.setText(pageTitles[position])).attach(); } @@ -515,27 +528,4 @@ public class MainActivity extends AppCompatActivity { super.onActivityResult(requestCode, resultCode, data); } } - - private class AppListFragmentStateAdapter extends FragmentStateAdapter { - AppListFragmentStateAdapter() { - super(MainActivity.this); - } - - @NonNull - @Override - public Fragment createFragment(int position) { - if (position == 0) { - return AppListFragment.newInstance(mServiceMain, false); - } else if (position == 1) { - return AppListFragment.newInstance(mServiceWork, true); - } else { - return null; - } - } - - @Override - public int getItemCount() { - return 2; - } - } } From c24d71eddba9a35a74f53e5882f96ef728b2dd69 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 13 Mar 2021 16:28:20 +0800 Subject: [PATCH 091/355] MainActivity: add vertical constraints to toolbar --- app/src/main/res/layout/activity_main.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index c639971..498de4f 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -10,6 +10,7 @@ android:id="@+id/main_appbar" android:layout_width="0dp" android:layout_height="wrap_content" + app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"> From 533e5bc14855bd736f06a14e3940ab7778932c1f Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 13 Mar 2021 16:35:27 +0800 Subject: [PATCH 092/355] MainActivity: cleanup unused device admin requests and text --- .../main/java/net/typeblog/shelter/ui/MainActivity.java | 9 --------- app/src/main/res/values/strings.xml | 1 - 2 files changed, 10 deletions(-) diff --git a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java index fb3f8f9..266a2a7 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java @@ -47,7 +47,6 @@ public class MainActivity extends AppCompatActivity { private static final int REQUEST_PROVISION_PROFILE = 1; private static final int REQUEST_START_SERVICE_IN_WORK_PROFILE = 2; - private static final int REQUEST_SET_DEVICE_ADMIN = 3; private static final int REQUEST_TRY_START_SERVICE_IN_WORK_PROFILE = 4; private static final int REQUEST_DOCUMENTS_CHOOSE_APK = 5; @@ -497,14 +496,6 @@ public class MainActivity extends AppCompatActivity { registerStartActivityProxies(); startKiller(); buildView(); - } else if (requestCode == REQUEST_SET_DEVICE_ADMIN) { - if (resultCode == RESULT_OK) { - // Device Admin is now set, go ahead to provisioning (or initialization) - init(); - } else { - Toast.makeText(this, getString(R.string.device_admin_toast), Toast.LENGTH_LONG).show(); - finish(); - } } else if (requestCode == REQUEST_DOCUMENTS_CHOOSE_APK && resultCode == RESULT_OK && data != null) { Uri uri = data.getData(); UriForwardProxy proxy = new UriForwardProxy(getApplicationContext(), uri); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 86a97af..976a65d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -75,7 +75,6 @@ https://www.patreon.com/PeterCxy - You have to grant Device Admin permission for Shelter to work. Please try again. Shelter is still being set up. You should be seeing a notification soon from Shelter, which you must click on to finish the setup process. If you do not see the notification, please disable Do Not Disturb mode and try again. Shelter setup complete. Now restarting Shelter. If Shelter didn\'t start automatically, you may launch it again from your launcher. Permission is denied or Unsupported device From c2d7c45db517b8db446828c74977ad5c1d111418 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Mon, 15 Mar 2021 16:46:29 +0800 Subject: [PATCH 093/355] import SetupWizardLibrary --- .gitmodules | 4 ++++ app/build.gradle | 2 ++ libs/SetupWizardLibrary | 1 + settings.gradle | 4 ++++ 4 files changed, 11 insertions(+) create mode 100644 .gitmodules create mode 160000 libs/SetupWizardLibrary diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..899467b --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "libs/SetupWizardLibrary"] + path = libs/SetupWizardLibrary + url = https://cgit.typeblog.net/SetupWizardLibrary.git + branch = android11-dev diff --git a/app/build.gradle b/app/build.gradle index a5632f4..0b9c96c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -43,6 +43,8 @@ dependencies { implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0' implementation 'mobi.upod:time-duration-picker:1.1.3' + debugImplementation project(path: ':setup-wizard-lib', configuration: 'gingerbreadCompatDebugRuntimeElements') + releaseImplementation project(path: ':setup-wizard-lib', configuration: 'gingerbreadCompatReleaseRuntimeElements') testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.4.0-alpha04' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0-alpha04' diff --git a/libs/SetupWizardLibrary b/libs/SetupWizardLibrary new file mode 160000 index 0000000..389cc92 --- /dev/null +++ b/libs/SetupWizardLibrary @@ -0,0 +1 @@ +Subproject commit 389cc9256395bbe3da587cd2ec7ffc5bf8439487 diff --git a/settings.gradle b/settings.gradle index e7b4def..6c42099 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1,5 @@ include ':app' + +include ':setup-wizard-lib' +project(':setup-wizard-lib').projectDir = new File('./libs/SetupWizardLibrary/library') +project(':setup-wizard-lib').buildFileName = 'standalone.gradle' \ No newline at end of file From 2b544a223befe7f002bdf33e6de0d1372ea9bdfb Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Mon, 15 Mar 2021 17:35:05 +0800 Subject: [PATCH 094/355] lay out the skeleton of SetupWizardActivity --- app/src/main/AndroidManifest.xml | 5 + .../net/typeblog/shelter/ui/MainActivity.java | 7 +- .../shelter/ui/SetupWizardActivity.java | 104 ++++++++++++++++++ .../main/res/layout/activity_setup_wizard.xml | 8 ++ .../fragment_setup_wizard_generic_text.xml | 20 ++++ app/src/main/res/values/strings.xml | 4 + 6 files changed, 145 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java create mode 100644 app/src/main/res/layout/activity_setup_wizard.xml create mode 100644 app/src/main/res/layout/fragment_setup_wizard_generic_text.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 140a4a6..f17b6ff 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -43,6 +43,11 @@ + + + diff --git a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java index 266a2a7..e1f7e34 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java @@ -102,16 +102,17 @@ public class MainActivity extends AppCompatActivity { finish(); } else if (!mStorage.getBoolean(LocalStorageManager.PREF_HAS_SETUP)) { // Reset the authentication key first - AuthenticationUtility.reset(); + //AuthenticationUtility.reset(); // If not set up yet, we have to provision the profile first - new AlertDialog.Builder(this) + /*new AlertDialog.Builder(this) .setCancelable(false) .setMessage(R.string.first_run_alert) .setPositiveButton(R.string.first_run_alert_continue, (dialog, which) -> setupProfile()) .setNegativeButton(R.string.first_run_alert_cancel, (dialog, which) -> finish()) - .show(); + .show();*/ + startActivity(new Intent(this, SetupWizardActivity.class)); } else { // Initialize the settings SettingsManager.getInstance().applyAll(); diff --git a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java new file mode 100644 index 0000000..bf3b0aa --- /dev/null +++ b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java @@ -0,0 +1,104 @@ +package net.typeblog.shelter.ui; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import android.content.Context; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.android.setupwizardlib.SetupWizardLayout; +import com.android.setupwizardlib.view.NavigationBar; + +import net.typeblog.shelter.R; + +public class SetupWizardActivity extends AppCompatActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_setup_wizard); + switchToFragment(new WelcomeFragment()); + } + + private void switchToFragment(T fragment) { + getSupportFragmentManager() + .beginTransaction() + .replace(R.id.setup_wizard_container, fragment) + .commit(); + } + + private static abstract class BaseWizardFragment extends Fragment implements NavigationBar.NavigationBarListener { + protected SetupWizardActivity mActivity = null; + protected SetupWizardLayout mWizard = null; + + protected abstract int getLayoutResource(); + + @Override + public void onNavigateBack() { + // For sub-classes to implement + } + + @Override + public void onNavigateNext() { + // For sub-classes to implement + } + + @Override + public void onAttach(@NonNull Context context) { + super.onAttach(context); + mActivity = (SetupWizardActivity) getActivity(); + } + + @Override + public void onDetach() { + super.onDetach(); + mActivity = null; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(getLayoutResource(), container, false); + mWizard = view.findViewById(R.id.wizard); + mWizard.getNavigationBar().setNavigationBarListener(this); + mWizard.setLayoutBackground(ContextCompat.getDrawable(inflater.getContext(), R.color.colorAccent)); + return view; + } + } + + protected static abstract class TextWizardFragment extends BaseWizardFragment { + protected abstract int getTextRes(); + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + TextView tv = view.findViewById(R.id.setup_wizard_generic_text); + tv.setText(getTextRes()); + } + } + + public static class WelcomeFragment extends TextWizardFragment { + @Override + protected int getLayoutResource() { + return R.layout.fragment_setup_wizard_generic_text; + } + + @Override + protected int getTextRes() { + return R.string.setup_wizard_welcome_text; + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + mWizard.setHeaderText(R.string.setup_wizard_welcome); + mWizard.getNavigationBar().getBackButton().setVisibility(View.GONE); + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_setup_wizard.xml b/app/src/main/res/layout/activity_setup_wizard.xml new file mode 100644 index 0000000..5c6ab51 --- /dev/null +++ b/app/src/main/res/layout/activity_setup_wizard.xml @@ -0,0 +1,8 @@ + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_setup_wizard_generic_text.xml b/app/src/main/res/layout/fragment_setup_wizard_generic_text.xml new file mode 100644 index 0000000..87588c5 --- /dev/null +++ b/app/src/main/res/layout/fragment_setup_wizard_generic_text.xml @@ -0,0 +1,20 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 976a65d..027be40 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8,6 +8,10 @@ Shelter needs to become Device Admin in order to perform its isolation tasks. Choose an Image File + + Welcome to Shelter + Shelter is an application to help you run other applications in an isolated profile. It does so by making use of the Work Profile feature of Android.\n\nClick "Next", and we will provide you with more information about Shelter, and guide you through the setup process. + Shelter Important Click here to finish setting up Shelter From 448601291f79da07f9bfecaebc2fdf6997d73b50 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Mon, 15 Mar 2021 17:47:17 +0800 Subject: [PATCH 095/355] SetupWizardActivity: add a permissions page --- .../shelter/ui/SetupWizardActivity.java | 30 +++++++++++++++++++ app/src/main/res/values/strings.xml | 4 ++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java index bf3b0aa..e8025a0 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java @@ -94,6 +94,12 @@ public class SetupWizardActivity extends AppCompatActivity { return R.string.setup_wizard_welcome_text; } + @Override + public void onNavigateNext() { + super.onNavigateNext(); + mActivity.switchToFragment(new PermissionsFragment()); + } + @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); @@ -101,4 +107,28 @@ public class SetupWizardActivity extends AppCompatActivity { mWizard.getNavigationBar().getBackButton().setVisibility(View.GONE); } } + + public static class PermissionsFragment extends TextWizardFragment { + @Override + protected int getLayoutResource() { + return R.layout.fragment_setup_wizard_generic_text; + } + + @Override + protected int getTextRes() { + return R.string.setup_wizard_permissions_text; + } + + @Override + public void onNavigateBack() { + super.onNavigateBack(); + mActivity.switchToFragment(new WelcomeFragment()); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + mWizard.setHeaderText(R.string.setup_wizard_permissions); + } + } } \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 027be40..2335939 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -10,7 +10,9 @@ Welcome to Shelter - Shelter is an application to help you run other applications in an isolated profile. It does so by making use of the Work Profile feature of Android.\n\nClick "Next", and we will provide you with more information about Shelter, and guide you through the setup process. + Shelter is an application to help you run other applications in an isolated profile. It does so by making use of the Work Profile feature of Android.\n\nClick "Next", and we will provide you with more information about Shelter, and guide you through the setup process.\n\nWe suggest that you read through all of the following pages carefully. + A word on permissions + By default, Shelter will not ask for any individual permissions. However, once you proceed with the setup process, Shelter will try to set up a Work Profile and hence become the profile manager of said profile.\n\nThis will grant Shelter an extensive list of permissions inside the profile, comparable to that of a Device Admin, albeit confined to the profile. Being the profile manager is necessary for most of Shelter\'s functionality.\n\nSome advanced features of Shelter may require more permissions outside the Work Profile. When needed, Shelter will ask for those permissions separately when you enable the corresponding features. Shelter Important From 3d9c2fcdcf62fac977f85d12e302dab699236abb Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Mon, 15 Mar 2021 19:38:21 +0800 Subject: [PATCH 096/355] SetupWizardActivity: add slide animation to the fragments --- .../shelter/ui/SetupWizardActivity.java | 22 ++++++++++++++----- app/src/main/res/anim/slide_in_from_left.xml | 6 +++++ app/src/main/res/anim/slide_in_from_right.xml | 6 +++++ app/src/main/res/anim/slide_out_to_left.xml | 6 +++++ app/src/main/res/anim/slide_out_to_right.xml | 6 +++++ 5 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 app/src/main/res/anim/slide_in_from_left.xml create mode 100644 app/src/main/res/anim/slide_in_from_right.xml create mode 100644 app/src/main/res/anim/slide_out_to_left.xml create mode 100644 app/src/main/res/anim/slide_out_to_right.xml diff --git a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java index e8025a0..a694d62 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java @@ -23,12 +23,22 @@ public class SetupWizardActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_setup_wizard); - switchToFragment(new WelcomeFragment()); - } - - private void switchToFragment(T fragment) { + // Don't use switchToFragment for the first time + // because we don't want animation for the first fragment + // (it would have nothing to animate upon, resulting in a black background) getSupportFragmentManager() .beginTransaction() + .replace(R.id.setup_wizard_container, new WelcomeFragment()) + .commit(); + } + + private void switchToFragment(T fragment, boolean reverseAnimation) { + getSupportFragmentManager() + .beginTransaction() + .setCustomAnimations( + reverseAnimation ? R.anim.slide_in_from_left : R.anim.slide_in_from_right, + reverseAnimation ? R.anim.slide_out_to_right : R.anim.slide_out_to_left + ) .replace(R.id.setup_wizard_container, fragment) .commit(); } @@ -97,7 +107,7 @@ public class SetupWizardActivity extends AppCompatActivity { @Override public void onNavigateNext() { super.onNavigateNext(); - mActivity.switchToFragment(new PermissionsFragment()); + mActivity.switchToFragment(new PermissionsFragment(), false); } @Override @@ -122,7 +132,7 @@ public class SetupWizardActivity extends AppCompatActivity { @Override public void onNavigateBack() { super.onNavigateBack(); - mActivity.switchToFragment(new WelcomeFragment()); + mActivity.switchToFragment(new WelcomeFragment(), true); } @Override diff --git a/app/src/main/res/anim/slide_in_from_left.xml b/app/src/main/res/anim/slide_in_from_left.xml new file mode 100644 index 0000000..5b800ee --- /dev/null +++ b/app/src/main/res/anim/slide_in_from_left.xml @@ -0,0 +1,6 @@ + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_in_from_right.xml b/app/src/main/res/anim/slide_in_from_right.xml new file mode 100644 index 0000000..8a4a29c --- /dev/null +++ b/app/src/main/res/anim/slide_in_from_right.xml @@ -0,0 +1,6 @@ + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_out_to_left.xml b/app/src/main/res/anim/slide_out_to_left.xml new file mode 100644 index 0000000..6c4f6bc --- /dev/null +++ b/app/src/main/res/anim/slide_out_to_left.xml @@ -0,0 +1,6 @@ + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_out_to_right.xml b/app/src/main/res/anim/slide_out_to_right.xml new file mode 100644 index 0000000..220ef3b --- /dev/null +++ b/app/src/main/res/anim/slide_out_to_right.xml @@ -0,0 +1,6 @@ + + \ No newline at end of file From 5b6b0fc96c912e87b5c2871e53f82356b5e96098 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Mon, 15 Mar 2021 20:03:05 +0800 Subject: [PATCH 097/355] SetupWizardActivity: add compatibility page --- .../shelter/ui/SetupWizardActivity.java | 30 +++++++++++++++++++ app/src/main/res/values/strings.xml | 2 ++ 2 files changed, 32 insertions(+) diff --git a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java index a694d62..a0ba8f0 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java @@ -135,10 +135,40 @@ public class SetupWizardActivity extends AppCompatActivity { mActivity.switchToFragment(new WelcomeFragment(), true); } + @Override + public void onNavigateNext() { + super.onNavigateNext(); + mActivity.switchToFragment(new CompatibilityFragment(), false); + } + @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mWizard.setHeaderText(R.string.setup_wizard_permissions); } } + + public static class CompatibilityFragment extends TextWizardFragment { + @Override + protected int getLayoutResource() { + return R.layout.fragment_setup_wizard_generic_text; + } + + @Override + protected int getTextRes() { + return R.string.setup_wizard_compatibility_text; + } + + @Override + public void onNavigateBack() { + super.onNavigateBack(); + mActivity.switchToFragment(new PermissionsFragment(), true); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + mWizard.setHeaderText(R.string.setup_wizard_compatibility); + } + } } \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2335939..c880560 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -13,6 +13,8 @@ Shelter is an application to help you run other applications in an isolated profile. It does so by making use of the Work Profile feature of Android.\n\nClick "Next", and we will provide you with more information about Shelter, and guide you through the setup process.\n\nWe suggest that you read through all of the following pages carefully. A word on permissions By default, Shelter will not ask for any individual permissions. However, once you proceed with the setup process, Shelter will try to set up a Work Profile and hence become the profile manager of said profile.\n\nThis will grant Shelter an extensive list of permissions inside the profile, comparable to that of a Device Admin, albeit confined to the profile. Being the profile manager is necessary for most of Shelter\'s functionality.\n\nSome advanced features of Shelter may require more permissions outside the Work Profile. When needed, Shelter will ask for those permissions separately when you enable the corresponding features. + Compatibility + Shelter is developed and tested on AOSP-like Android derivatives. This includes AOSP (Android Open Source Project), Google Android (on Pixels), and most AOSP-based open-source custom ROMs such as LineageOS. If your phone is running one of the Android derivatives listed above, then congratulations! Shelter is probably going to work correctly on your device.\n\nSome device vendors introduce very invasive customizations into the Android code base, resulting in conflicts, incompatibility and unexpected behavior. Some custom ROMs can also introduce compatibility-breaking changes, but generally these are rarer occurrences compared to phone vendor-introduced incompatibilities.\n\nSheler is merely an interface into the Work Profile feature provided by the system. If the feature provided by the system is broken or non-standard, Shelter could not magically resolve the issue on its own. If you are currently using a vendor-modified Android version that is known to break Work Profiles, you have been warned. You may proceed anyway, but there is no guarantee that Shelter would behave correctly under these circumstances. Shelter Important From 9594c368fd955f844749ad9306a52c279615cc53 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Mon, 15 Mar 2021 20:14:32 +0800 Subject: [PATCH 098/355] SetupWizardActivity: add the final "Ready?" fragment --- .../shelter/ui/SetupWizardActivity.java | 30 +++++++++++++++++++ app/src/main/res/values/strings.xml | 2 ++ 2 files changed, 32 insertions(+) diff --git a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java index a0ba8f0..2913ccf 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java @@ -165,10 +165,40 @@ public class SetupWizardActivity extends AppCompatActivity { mActivity.switchToFragment(new PermissionsFragment(), true); } + @Override + public void onNavigateNext() { + super.onNavigateNext(); + mActivity.switchToFragment(new ReadyFragment(), false); + } + @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mWizard.setHeaderText(R.string.setup_wizard_compatibility); } } + + public static class ReadyFragment extends TextWizardFragment { + @Override + protected int getLayoutResource() { + return R.layout.fragment_setup_wizard_generic_text; + } + + @Override + protected int getTextRes() { + return R.string.setup_wizard_ready_text; + } + + @Override + public void onNavigateBack() { + super.onNavigateBack(); + mActivity.switchToFragment(new CompatibilityFragment(), true); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + mWizard.setHeaderText(R.string.setup_wizard_ready); + } + } } \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c880560..9ed0042 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -15,6 +15,8 @@ By default, Shelter will not ask for any individual permissions. However, once you proceed with the setup process, Shelter will try to set up a Work Profile and hence become the profile manager of said profile.\n\nThis will grant Shelter an extensive list of permissions inside the profile, comparable to that of a Device Admin, albeit confined to the profile. Being the profile manager is necessary for most of Shelter\'s functionality.\n\nSome advanced features of Shelter may require more permissions outside the Work Profile. When needed, Shelter will ask for those permissions separately when you enable the corresponding features. Compatibility Shelter is developed and tested on AOSP-like Android derivatives. This includes AOSP (Android Open Source Project), Google Android (on Pixels), and most AOSP-based open-source custom ROMs such as LineageOS. If your phone is running one of the Android derivatives listed above, then congratulations! Shelter is probably going to work correctly on your device.\n\nSome device vendors introduce very invasive customizations into the Android code base, resulting in conflicts, incompatibility and unexpected behavior. Some custom ROMs can also introduce compatibility-breaking changes, but generally these are rarer occurrences compared to phone vendor-introduced incompatibilities.\n\nSheler is merely an interface into the Work Profile feature provided by the system. If the feature provided by the system is broken or non-standard, Shelter could not magically resolve the issue on its own. If you are currently using a vendor-modified Android version that is known to break Work Profiles, you have been warned. You may proceed anyway, but there is no guarantee that Shelter would behave correctly under these circumstances. + Ready? + We are now ready to set up Shelter for you. Please first ensure that your device is not in Do Not Disturb mode, because you will need to click on a notification later to finalize the setup process.\n\nWhen you are ready, click on "Next" to begin the setup process. Shelter Important From f7c350454973feaaf316e525a9a28e0a4ae92517 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Mon, 15 Mar 2021 20:15:10 +0800 Subject: [PATCH 099/355] SetupWizard: i18n: escape quotes properly --- app/src/main/res/values/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9ed0042..68b81d1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -10,13 +10,13 @@ Welcome to Shelter - Shelter is an application to help you run other applications in an isolated profile. It does so by making use of the Work Profile feature of Android.\n\nClick "Next", and we will provide you with more information about Shelter, and guide you through the setup process.\n\nWe suggest that you read through all of the following pages carefully. + Shelter is an application to help you run other applications in an isolated profile. It does so by making use of the Work Profile feature of Android.\n\nClick \"Next\", and we will provide you with more information about Shelter, and guide you through the setup process.\n\nWe suggest that you read through all of the following pages carefully. A word on permissions By default, Shelter will not ask for any individual permissions. However, once you proceed with the setup process, Shelter will try to set up a Work Profile and hence become the profile manager of said profile.\n\nThis will grant Shelter an extensive list of permissions inside the profile, comparable to that of a Device Admin, albeit confined to the profile. Being the profile manager is necessary for most of Shelter\'s functionality.\n\nSome advanced features of Shelter may require more permissions outside the Work Profile. When needed, Shelter will ask for those permissions separately when you enable the corresponding features. Compatibility Shelter is developed and tested on AOSP-like Android derivatives. This includes AOSP (Android Open Source Project), Google Android (on Pixels), and most AOSP-based open-source custom ROMs such as LineageOS. If your phone is running one of the Android derivatives listed above, then congratulations! Shelter is probably going to work correctly on your device.\n\nSome device vendors introduce very invasive customizations into the Android code base, resulting in conflicts, incompatibility and unexpected behavior. Some custom ROMs can also introduce compatibility-breaking changes, but generally these are rarer occurrences compared to phone vendor-introduced incompatibilities.\n\nSheler is merely an interface into the Work Profile feature provided by the system. If the feature provided by the system is broken or non-standard, Shelter could not magically resolve the issue on its own. If you are currently using a vendor-modified Android version that is known to break Work Profiles, you have been warned. You may proceed anyway, but there is no guarantee that Shelter would behave correctly under these circumstances. Ready? - We are now ready to set up Shelter for you. Please first ensure that your device is not in Do Not Disturb mode, because you will need to click on a notification later to finalize the setup process.\n\nWhen you are ready, click on "Next" to begin the setup process. + We are now ready to set up Shelter for you. Please first ensure that your device is not in Do Not Disturb mode, because you will need to click on a notification later to finalize the setup process.\n\nWhen you are ready, click on \"Next\" to begin the setup process. Shelter Important From 924ad140086dd93f678d403ae1e2a2ff88d693a8 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Mon, 15 Mar 2021 20:16:29 +0800 Subject: [PATCH 100/355] SetupWizard: layout: no scroll view is needed * SetupWizardLayout has a built-in one --- .../layout/fragment_setup_wizard_generic_text.xml | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/app/src/main/res/layout/fragment_setup_wizard_generic_text.xml b/app/src/main/res/layout/fragment_setup_wizard_generic_text.xml index 87588c5..2fec847 100644 --- a/app/src/main/res/layout/fragment_setup_wizard_generic_text.xml +++ b/app/src/main/res/layout/fragment_setup_wizard_generic_text.xml @@ -5,16 +5,10 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - - + android:layout_height="wrap_content" + android:layout_margin="40dp" /> \ No newline at end of file From 13599506c5db7b1393d60d809e0b7ca0bcc52eb0 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 17 Mar 2021 15:33:54 +0800 Subject: [PATCH 101/355] SetupWizardActivity: implement setup [1/n] --- .../net/typeblog/shelter/ui/MainActivity.java | 8 +- .../shelter/ui/SetupWizardActivity.java | 89 +++++++++++++++++++ .../res/color/setup_wizard_progress_bar.xml | 5 ++ app/src/main/res/values/colors.xml | 1 + app/src/main/res/values/strings.xml | 4 + 5 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/color/setup_wizard_progress_bar.xml diff --git a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java index e1f7e34..ccfd8e5 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java @@ -15,6 +15,7 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.widget.Toast; +import androidx.activity.result.ActivityResult; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; @@ -112,7 +113,12 @@ public class MainActivity extends AppCompatActivity { .setNegativeButton(R.string.first_run_alert_cancel, (dialog, which) -> finish()) .show();*/ - startActivity(new Intent(this, SetupWizardActivity.class)); + registerForActivityResult(new SetupWizardActivity.SetupWizardContract(), (Boolean result) -> { + if (result) + init(); + else + finish(); + }).launch(null); } else { // Initialize the settings SettingsManager.getInstance().applyAll(); diff --git a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java index 2913ccf..9dd84d9 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java @@ -1,12 +1,15 @@ package net.typeblog.shelter.ui; +import androidx.activity.result.contract.ActivityResultContract; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; +import android.app.admin.DevicePolicyManager; import android.content.Context; +import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; @@ -19,10 +22,13 @@ import com.android.setupwizardlib.view.NavigationBar; import net.typeblog.shelter.R; public class SetupWizardActivity extends AppCompatActivity { + private DevicePolicyManager mPolicyManager = null; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_setup_wizard); + mPolicyManager = getSystemService(DevicePolicyManager.class); // Don't use switchToFragment for the first time // because we don't want animation for the first fragment // (it would have nothing to animate upon, resulting in a black background) @@ -43,6 +49,30 @@ public class SetupWizardActivity extends AppCompatActivity { .commit(); } + private void finishWithResult(boolean succeeded) { + setResult(succeeded ? RESULT_OK : RESULT_CANCELED); + finish(); + } + + private void setupProfile() { + // Placeholder + switchToFragment(new FailedFragment(), false); + } + + public static class SetupWizardContract extends ActivityResultContract { + @NonNull + @Override + public Intent createIntent(@NonNull Context context, Void input) { + return new Intent(context, SetupWizardActivity.class); + } + + @Override + public Boolean parseResult(int resultCode, @Nullable Intent intent) { + return resultCode == RESULT_OK; + } + } + + // ==== SetupWizard steps ==== private static abstract class BaseWizardFragment extends Fragment implements NavigationBar.NavigationBarListener { protected SetupWizardActivity mActivity = null; protected SetupWizardLayout mWizard = null; @@ -195,10 +225,69 @@ public class SetupWizardActivity extends AppCompatActivity { mActivity.switchToFragment(new CompatibilityFragment(), true); } + @Override + public void onNavigateNext() { + super.onNavigateNext(); + mActivity.switchToFragment(new PleaseWaitFragment(), false); + } + @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mWizard.setHeaderText(R.string.setup_wizard_ready); } } + + public static class PleaseWaitFragment extends TextWizardFragment { + @Override + protected int getLayoutResource() { + return R.layout.fragment_setup_wizard_generic_text; + } + + @Override + protected int getTextRes() { + return R.string.setup_wizard_please_wait_text; + } + + @Override + public void onAttach(@NonNull Context context) { + super.onAttach(context); + mActivity.setupProfile(); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + mWizard.setHeaderText(R.string.setup_wizard_please_wait); + mWizard.setProgressBarColor(view.getContext().getColorStateList(R.color.setup_wizard_progress_bar)); + mWizard.setProgressBarShown(true); + mWizard.getNavigationBar().getBackButton().setVisibility(View.GONE); + mWizard.getNavigationBar().getNextButton().setVisibility(View.GONE); + } + } + + public static class FailedFragment extends TextWizardFragment { + @Override + protected int getLayoutResource() { + return R.layout.fragment_setup_wizard_generic_text; + } + + @Override + protected int getTextRes() { + return R.string.setup_wizard_failed_text; + } + + @Override + public void onNavigateNext() { + super.onNavigateNext(); + mActivity.finishWithResult(false); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + mWizard.setHeaderText(R.string.setup_wizard_failed); + mWizard.getNavigationBar().getBackButton().setVisibility(View.GONE); + } + } } \ No newline at end of file diff --git a/app/src/main/res/color/setup_wizard_progress_bar.xml b/app/src/main/res/color/setup_wizard_progress_bar.xml new file mode 100644 index 0000000..db5ff16 --- /dev/null +++ b/app/src/main/res/color/setup_wizard_progress_bar.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index deb24d5..a61264d 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -3,6 +3,7 @@ #FAFAFA #C2C2C2 #009688 + #FFC107 #333333 #999999 #E0F2F1 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 68b81d1..3bfe436 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -17,6 +17,10 @@ Shelter is developed and tested on AOSP-like Android derivatives. This includes AOSP (Android Open Source Project), Google Android (on Pixels), and most AOSP-based open-source custom ROMs such as LineageOS. If your phone is running one of the Android derivatives listed above, then congratulations! Shelter is probably going to work correctly on your device.\n\nSome device vendors introduce very invasive customizations into the Android code base, resulting in conflicts, incompatibility and unexpected behavior. Some custom ROMs can also introduce compatibility-breaking changes, but generally these are rarer occurrences compared to phone vendor-introduced incompatibilities.\n\nSheler is merely an interface into the Work Profile feature provided by the system. If the feature provided by the system is broken or non-standard, Shelter could not magically resolve the issue on its own. If you are currently using a vendor-modified Android version that is known to break Work Profiles, you have been warned. You may proceed anyway, but there is no guarantee that Shelter would behave correctly under these circumstances. Ready? We are now ready to set up Shelter for you. Please first ensure that your device is not in Do Not Disturb mode, because you will need to click on a notification later to finalize the setup process.\n\nWhen you are ready, click on \"Next\" to begin the setup process. + Please wait… + We are trying to initialize Work Profile and set up Shelter on your device. + Setup failed + We regret to inform you that we were not able to set up Shelter for you.\n\nIf you did not cancel the setup manually, then the reason for the failure is most commonly due to a heavily modified system, or a conflict between Shelter and other Work Profile managers. Unfortunately, there is not much that we could do about this.\n\nClick "Next" to exit. Shelter Important From 65bfaa47292a8a8bfff146c5075f1503de276ea3 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 17 Mar 2021 15:35:20 +0800 Subject: [PATCH 102/355] .idea: whatever IDEA decided to change --- .idea/vcs.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 94a25f7..15be628 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -2,5 +2,6 @@ + \ No newline at end of file From ca225e19d5cc415abe5377022583feae5006d520 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 17 Mar 2021 15:58:08 +0800 Subject: [PATCH 103/355] SetupWizardActivity: actually implement setup --- .../typeblog/shelter/ui/DummyActivity.java | 2 +- .../shelter/ui/SetupWizardActivity.java | 84 ++++++++++++++++++- app/src/main/res/values/strings.xml | 2 + 3 files changed, 85 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java b/app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java index 2c93a79..b0d7e24 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java @@ -239,7 +239,7 @@ public class DummyActivity extends Activity { LocalStorageManager.getInstance() .setBoolean(LocalStorageManager.PREF_IS_SETTING_UP, false); Intent intent = new Intent(Intent.ACTION_MAIN); - intent.setComponent(new ComponentName(this, MainActivity.class)); + intent.setComponent(new ComponentName(this, SetupWizardActivity.class)); startActivity(intent); Toast.makeText(this, getString(R.string.provision_finished), Toast.LENGTH_LONG).show(); finish(); diff --git a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java index 9dd84d9..ad32352 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java @@ -1,5 +1,6 @@ package net.typeblog.shelter.ui; +import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContract; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -8,6 +9,8 @@ import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import android.app.admin.DevicePolicyManager; +import android.content.ActivityNotFoundException; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.Bundle; @@ -20,15 +23,22 @@ import com.android.setupwizardlib.SetupWizardLayout; import com.android.setupwizardlib.view.NavigationBar; import net.typeblog.shelter.R; +import net.typeblog.shelter.receivers.ShelterDeviceAdminReceiver; +import net.typeblog.shelter.util.LocalStorageManager; public class SetupWizardActivity extends AppCompatActivity { private DevicePolicyManager mPolicyManager = null; + private LocalStorageManager mStorage = null; + + private final ActivityResultLauncher mProvisionProfile = + registerForActivityResult(new ProfileProvisionContract(), this::setupProfileCb); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_setup_wizard); mPolicyManager = getSystemService(DevicePolicyManager.class); + mStorage = LocalStorageManager.getInstance(); // Don't use switchToFragment for the first time // because we don't want animation for the first fragment // (it would have nothing to animate upon, resulting in a black background) @@ -38,6 +48,15 @@ public class SetupWizardActivity extends AppCompatActivity { .commit(); } + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + // DummyActivity will start this activity with an empty intent + // once the provision is finalized + // TODO: should verify if the work profile is available at this point + finishWithResult(true); + } + private void switchToFragment(T fragment, boolean reverseAnimation) { getSupportFragmentManager() .beginTransaction() @@ -55,8 +74,30 @@ public class SetupWizardActivity extends AppCompatActivity { } private void setupProfile() { - // Placeholder - switchToFragment(new FailedFragment(), false); + if (!mPolicyManager.isProvisioningAllowed(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE)) { + switchToFragment(new FailedFragment(), false); + return; + } + + try { + mProvisionProfile.launch(null); + } catch (ActivityNotFoundException e) { + // How could this fail??? + switchToFragment(new FailedFragment(), false); + } + } + + private void setupProfileCb(Boolean result) { + if (result) { + // Provisioning finished, but we still need to tell the user + // to click on the notification to bring up Shelter inside the + // profile. Otherwise, the setup will not be complete + // TODO: should handle the case when the profile setup is already complete + mStorage.setBoolean(LocalStorageManager.PREF_IS_SETTING_UP, true); + switchToFragment(new ActionRequiredFragment(), false); + } else { + switchToFragment(new FailedFragment(), false); + } } public static class SetupWizardContract extends ActivityResultContract { @@ -72,6 +113,23 @@ public class SetupWizardActivity extends AppCompatActivity { } } + private static class ProfileProvisionContract extends ActivityResultContract { + @NonNull + @Override + public Intent createIntent(@NonNull Context context, Void input) { + ComponentName admin = new ComponentName(context.getApplicationContext(), ShelterDeviceAdminReceiver.class); + Intent intent = new Intent(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE); + intent.putExtra(DevicePolicyManager.EXTRA_PROVISIONING_SKIP_ENCRYPTION, true); + intent.putExtra(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, admin); + return intent; + } + + @Override + public Boolean parseResult(int resultCode, @Nullable Intent intent) { + return resultCode == RESULT_OK; + } + } + // ==== SetupWizard steps ==== private static abstract class BaseWizardFragment extends Fragment implements NavigationBar.NavigationBarListener { protected SetupWizardActivity mActivity = null; @@ -266,6 +324,28 @@ public class SetupWizardActivity extends AppCompatActivity { } } + public static class ActionRequiredFragment extends TextWizardFragment { + @Override + protected int getLayoutResource() { + return R.layout.fragment_setup_wizard_generic_text; + } + + @Override + protected int getTextRes() { + return R.string.setup_wizard_action_required_text; + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + mWizard.setHeaderText(R.string.setup_wizard_action_required); + mWizard.setProgressBarColor(view.getContext().getColorStateList(R.color.setup_wizard_progress_bar)); + mWizard.setProgressBarShown(true); + mWizard.getNavigationBar().getBackButton().setVisibility(View.GONE); + mWizard.getNavigationBar().getNextButton().setVisibility(View.GONE); + } + } + public static class FailedFragment extends TextWizardFragment { @Override protected int getLayoutResource() { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3bfe436..2f40352 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -21,6 +21,8 @@ We are trying to initialize Work Profile and set up Shelter on your device. Setup failed We regret to inform you that we were not able to set up Shelter for you.\n\nIf you did not cancel the setup manually, then the reason for the failure is most commonly due to a heavily modified system, or a conflict between Shelter and other Work Profile managers. Unfortunately, there is not much that we could do about this.\n\nClick "Next" to exit. + Action required + You should now be seeing a notification from Shelter. Please click on that notification to finish the setup process.\n\nIf you do not see the notification, make sure your device is not in Do Not Disturb mode and try again.\n\nTo reset Shelter and start over, you can clear the data of Shelter in Settings. Shelter Important From a4065053869eaa94ab2837cbb37fd288338a93ea Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 17 Mar 2021 16:06:18 +0800 Subject: [PATCH 104/355] refactor: move isProfileAvailable to Utility * and clean up profile provisioning code from MainActivity --- .../net/typeblog/shelter/ui/MainActivity.java | 94 +------------------ .../shelter/ui/SetupWizardActivity.java | 14 ++- .../net/typeblog/shelter/util/Utility.java | 21 +++++ 3 files changed, 34 insertions(+), 95 deletions(-) diff --git a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java index ccfd8e5..cdaee93 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java @@ -1,6 +1,5 @@ package net.typeblog.shelter.ui; -import android.app.ProgressDialog; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.Intent; @@ -15,7 +14,6 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.widget.Toast; -import androidx.activity.result.ActivityResult; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; @@ -31,12 +29,10 @@ import com.google.android.material.tabs.TabLayoutMediator; import net.typeblog.shelter.R; import net.typeblog.shelter.ShelterApplication; -import net.typeblog.shelter.receivers.ShelterDeviceAdminReceiver; import net.typeblog.shelter.services.IAppInstallCallback; import net.typeblog.shelter.services.IShelterService; import net.typeblog.shelter.services.IStartActivityProxy; import net.typeblog.shelter.services.KillerService; -import net.typeblog.shelter.util.AuthenticationUtility; import net.typeblog.shelter.util.LocalStorageManager; import net.typeblog.shelter.util.SettingsManager; import net.typeblog.shelter.util.UriForwardProxy; @@ -46,7 +42,6 @@ public class MainActivity extends AppCompatActivity { public static final String BROADCAST_CONTEXT_MENU_CLOSED = "net.typeblog.shelter.broadcast.CONTEXT_MENU_CLOSED"; public static final String BROADCAST_SEARCH_FILTER_CHANGED = "net.typeblog.shelter.broadcast.SEARCH_FILTER_CHANGED"; - private static final int REQUEST_PROVISION_PROFILE = 1; private static final int REQUEST_START_SERVICE_IN_WORK_PROFILE = 2; private static final int REQUEST_TRY_START_SERVICE_IN_WORK_PROFILE = 4; private static final int REQUEST_DOCUMENTS_CHOOSE_APK = 5; @@ -54,9 +49,6 @@ public class MainActivity extends AppCompatActivity { private LocalStorageManager mStorage = null; private DevicePolicyManager mPolicyManager = null; - // The "please wait" dialog when creating profile - private ProgressDialog mProgressDialog = null; - // Flag to avoid double-killing our services while restarting private boolean mRestarting = false; @@ -87,32 +79,12 @@ public class MainActivity extends AppCompatActivity { } - @Override - protected void onNewIntent(Intent intent) { - super.onNewIntent(intent); - if (mProgressDialog != null && isWorkProfileAvailable()) { - mProgressDialog.dismiss(); - init(); - } - } - private void init() { - if (mStorage.getBoolean(LocalStorageManager.PREF_IS_SETTING_UP) && !isWorkProfileAvailable()) { + if (mStorage.getBoolean(LocalStorageManager.PREF_IS_SETTING_UP) && !Utility.isWorkProfileAvailable(this)) { // Provision is still going on... Toast.makeText(this, R.string.provision_still_pending, Toast.LENGTH_SHORT).show(); finish(); } else if (!mStorage.getBoolean(LocalStorageManager.PREF_HAS_SETUP)) { - // Reset the authentication key first - //AuthenticationUtility.reset(); - // If not set up yet, we have to provision the profile first - /*new AlertDialog.Builder(this) - .setCancelable(false) - .setMessage(R.string.first_run_alert) - .setPositiveButton(R.string.first_run_alert_continue, - (dialog, which) -> setupProfile()) - .setNegativeButton(R.string.first_run_alert_cancel, - (dialog, which) -> finish()) - .show();*/ registerForActivityResult(new SetupWizardActivity.SetupWizardContract(), (Boolean result) -> { if (result) init(); @@ -127,25 +99,6 @@ public class MainActivity extends AppCompatActivity { } } - private void setupProfile() { - // Build the provisioning intent first - ComponentName admin = new ComponentName(getApplicationContext(), ShelterDeviceAdminReceiver.class); - Intent intent = new Intent(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE); - intent.putExtra(DevicePolicyManager.EXTRA_PROVISIONING_SKIP_ENCRYPTION, true); - intent.putExtra(DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, admin); - - // Check if provisioning is allowed - if (!mPolicyManager.isProvisioningAllowed(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE) - || getPackageManager().resolveActivity(intent, 0) == null) { - Toast.makeText(this, - getString(R.string.msg_device_unsupported), Toast.LENGTH_LONG).show(); - finish(); - } - - // Start provisioning - startActivityForResult(intent, REQUEST_PROVISION_PROFILE); - } - private void bindServices() { // Bind to the service provided by this app in main user // The service in main profile doesn't need to be foreground @@ -240,26 +193,6 @@ public class MainActivity extends AppCompatActivity { tab.setText(pageTitles[position])).attach(); } - private boolean isWorkProfileAvailable() { - // Determine if the work profile is already available - // If so, return true and set all the corresponding flags to true - // This is for scenarios where the asynchronous part of the - // setup process might be finished before the synchronous part - Intent intent = new Intent(DummyActivity.TRY_START_SERVICE); - try { - // DO NOT sign this request, because this won't be actually sent to work profile - // If this is signed, and is the first request to be signed, - // then the other side would never receive the auth_key - Utility.transferIntentToProfileUnsigned(this, intent); - mStorage.setBoolean(LocalStorageManager.PREF_IS_SETTING_UP, false); - mStorage.setBoolean(LocalStorageManager.PREF_HAS_SETUP, true); - return true; - } catch (IllegalStateException e) { - // If any exception is thrown, this means that the profile is not available - return false; - } - } - // Get the service on the other side // remote (work) -> main // main -> remote (work) @@ -460,30 +393,7 @@ public class MainActivity extends AppCompatActivity { @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { - if (requestCode == REQUEST_PROVISION_PROFILE) { - if (resultCode == RESULT_OK) { - if (isWorkProfileAvailable()) { - // For pre-Oreo, or post-Oreo on some circumstances, - // by the time this is received, the whole process - // should have completed. - recreate(); - return; - } - // The sync part of the setup process is completed - // Wait for the provisioning to complete - mStorage.setBoolean(LocalStorageManager.PREF_IS_SETTING_UP, true); - - // However, we still have to wait for DummyActivity in work profile to finish - mProgressDialog = new ProgressDialog(this); - mProgressDialog.setMessage(getString(R.string.provision_still_pending)); - mProgressDialog.setCancelable(false); - mProgressDialog.show(); - } else { - Toast.makeText(this, - getString(R.string.work_profile_provision_failed), Toast.LENGTH_LONG).show(); - finish(); - } - } else if (requestCode == REQUEST_TRY_START_SERVICE_IN_WORK_PROFILE) { + if (requestCode == REQUEST_TRY_START_SERVICE_IN_WORK_PROFILE) { if (resultCode == RESULT_OK) { // RESULT_OK is from DummyActivity. The work profile is enabled! bindWorkService(); diff --git a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java index ad32352..5617ca3 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java @@ -25,6 +25,7 @@ import com.android.setupwizardlib.view.NavigationBar; import net.typeblog.shelter.R; import net.typeblog.shelter.receivers.ShelterDeviceAdminReceiver; import net.typeblog.shelter.util.LocalStorageManager; +import net.typeblog.shelter.util.Utility; public class SetupWizardActivity extends AppCompatActivity { private DevicePolicyManager mPolicyManager = null; @@ -53,8 +54,8 @@ public class SetupWizardActivity extends AppCompatActivity { super.onNewIntent(intent); // DummyActivity will start this activity with an empty intent // once the provision is finalized - // TODO: should verify if the work profile is available at this point - finishWithResult(true); + if (Utility.isWorkProfileAvailable(this)) + finishWithResult(true); } private void switchToFragment(T fragment, boolean reverseAnimation) { @@ -89,10 +90,17 @@ public class SetupWizardActivity extends AppCompatActivity { private void setupProfileCb(Boolean result) { if (result) { + if (Utility.isWorkProfileAvailable(this)) { + // On pre-Oreo, and sometimes on post-Oreo + // the setup could be already finalized at this point + // There is no need for more action + finishWithResult(true); + return; + } + // Provisioning finished, but we still need to tell the user // to click on the notification to bring up Shelter inside the // profile. Otherwise, the setup will not be complete - // TODO: should handle the case when the profile setup is already complete mStorage.setBoolean(LocalStorageManager.PREF_IS_SETTING_UP, true); switchToFragment(new ActionRequiredFragment(), false); } else { diff --git a/app/src/main/java/net/typeblog/shelter/util/Utility.java b/app/src/main/java/net/typeblog/shelter/util/Utility.java index 8a48849..21e312d 100644 --- a/app/src/main/java/net/typeblog/shelter/util/Utility.java +++ b/app/src/main/java/net/typeblog/shelter/util/Utility.java @@ -93,6 +93,27 @@ public class Utility { } } + // Determine if the work profile is already available + // If so, return true and set all the corresponding flags to true + // This is for scenarios where the asynchronous part of the + // setup process might be finished before the synchronous part + public static boolean isWorkProfileAvailable(Context context) { + LocalStorageManager storage = LocalStorageManager.getInstance(); + Intent intent = new Intent(DummyActivity.TRY_START_SERVICE); + try { + // DO NOT sign this request, because this won't be actually sent to work profile + // If this is signed, and is the first request to be signed, + // then the other side would never receive the auth_key + Utility.transferIntentToProfileUnsigned(context, intent); + storage.setBoolean(LocalStorageManager.PREF_IS_SETTING_UP, false); + storage.setBoolean(LocalStorageManager.PREF_HAS_SETUP, true); + return true; + } catch (IllegalStateException e) { + // If any exception is thrown, this means that the profile is not available + return false; + } + } + // Enforce policies and configurations in the work profile public static void enforceWorkProfilePolicies(Context context) { DevicePolicyManager manager = context.getSystemService(DevicePolicyManager.class); From 36d2988ec218f49b3c3cf14efda4cd9efce64f92 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 17 Mar 2021 16:08:02 +0800 Subject: [PATCH 105/355] SetupWizardActivity: reset authentication keys before provisioning --- .../java/net/typeblog/shelter/ui/SetupWizardActivity.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java index 5617ca3..63499cf 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java @@ -24,6 +24,7 @@ import com.android.setupwizardlib.view.NavigationBar; import net.typeblog.shelter.R; import net.typeblog.shelter.receivers.ShelterDeviceAdminReceiver; +import net.typeblog.shelter.util.AuthenticationUtility; import net.typeblog.shelter.util.LocalStorageManager; import net.typeblog.shelter.util.Utility; @@ -80,6 +81,11 @@ public class SetupWizardActivity extends AppCompatActivity { return; } + // The user may have aborted provisioning before without clearing data + // This can cause issues if the authentication utility thinks we + // could do authentication due to the presence of keys + AuthenticationUtility.reset(); + try { mProvisionProfile.launch(null); } catch (ActivityNotFoundException e) { From d79cc800cb26e870444c2eb8b6d025b8b56390cf Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 17 Mar 2021 16:11:01 +0800 Subject: [PATCH 106/355] MainActivity: ActivityResultLauncher has to be created before starting --- .../net/typeblog/shelter/ui/MainActivity.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java index cdaee93..ad6b8d4 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java @@ -14,6 +14,7 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.widget.Toast; +import androidx.activity.result.ActivityResultLauncher; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; @@ -46,6 +47,9 @@ public class MainActivity extends AppCompatActivity { private static final int REQUEST_TRY_START_SERVICE_IN_WORK_PROFILE = 4; private static final int REQUEST_DOCUMENTS_CHOOSE_APK = 5; + private final ActivityResultLauncher mStartSetup = + registerForActivityResult(new SetupWizardActivity.SetupWizardContract(), this::setupWizardCb); + private LocalStorageManager mStorage = null; private DevicePolicyManager mPolicyManager = null; @@ -85,12 +89,7 @@ public class MainActivity extends AppCompatActivity { Toast.makeText(this, R.string.provision_still_pending, Toast.LENGTH_SHORT).show(); finish(); } else if (!mStorage.getBoolean(LocalStorageManager.PREF_HAS_SETUP)) { - registerForActivityResult(new SetupWizardActivity.SetupWizardContract(), (Boolean result) -> { - if (result) - init(); - else - finish(); - }).launch(null); + mStartSetup.launch(null); } else { // Initialize the settings SettingsManager.getInstance().applyAll(); @@ -99,6 +98,13 @@ public class MainActivity extends AppCompatActivity { } } + private void setupWizardCb(Boolean result) { + if (result) + init(); + else + finish(); + } + private void bindServices() { // Bind to the service provided by this app in main user // The service in main profile doesn't need to be foreground From 7e34b754433c62e73d9b5e8407774aece9e2f854 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 17 Mar 2021 16:18:48 +0800 Subject: [PATCH 107/355] SetupWizardActivity: support resuming setup --- .../net/typeblog/shelter/ui/MainActivity.java | 8 ++++--- .../shelter/ui/SetupWizardActivity.java | 24 ++++++++++++++++++- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java index ad6b8d4..a0cc021 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java @@ -49,6 +49,8 @@ public class MainActivity extends AppCompatActivity { private final ActivityResultLauncher mStartSetup = registerForActivityResult(new SetupWizardActivity.SetupWizardContract(), this::setupWizardCb); + private final ActivityResultLauncher mResumeSetup = + registerForActivityResult(new SetupWizardActivity.ResumeSetupContract(), this::setupWizardCb); private LocalStorageManager mStorage = null; private DevicePolicyManager mPolicyManager = null; @@ -85,9 +87,9 @@ public class MainActivity extends AppCompatActivity { private void init() { if (mStorage.getBoolean(LocalStorageManager.PREF_IS_SETTING_UP) && !Utility.isWorkProfileAvailable(this)) { - // Provision is still going on... - Toast.makeText(this, R.string.provision_still_pending, Toast.LENGTH_SHORT).show(); - finish(); + // System has already finished provisioning, but Shelter still + // needs to be brought up inside the work profile + mResumeSetup.launch(null); } else if (!mStorage.getBoolean(LocalStorageManager.PREF_HAS_SETUP)) { mStartSetup.launch(null); } else { diff --git a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java index 63499cf..a4ace0f 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java @@ -29,6 +29,11 @@ import net.typeblog.shelter.util.LocalStorageManager; import net.typeblog.shelter.util.Utility; public class SetupWizardActivity extends AppCompatActivity { + // RESUME_SETUP should be used when MainActivity detects the provisioning has been + // finished by the system, but the Shelter inside the profile has never been brought up + // due to the user having not clicked on the notification yet. + public static final String ACTION_RESUME_SETUP = "net.typeblog.shelter.RESUME_SETUP"; + private DevicePolicyManager mPolicyManager = null; private LocalStorageManager mStorage = null; @@ -46,7 +51,9 @@ public class SetupWizardActivity extends AppCompatActivity { // (it would have nothing to animate upon, resulting in a black background) getSupportFragmentManager() .beginTransaction() - .replace(R.id.setup_wizard_container, new WelcomeFragment()) + .replace(R.id.setup_wizard_container, + ACTION_RESUME_SETUP.equals(getIntent().getAction()) ? + new ActionRequiredFragment() : new WelcomeFragment()) .commit(); } @@ -127,6 +134,21 @@ public class SetupWizardActivity extends AppCompatActivity { } } + public static class ResumeSetupContract extends ActivityResultContract { + @NonNull + @Override + public Intent createIntent(@NonNull Context context, Void input) { + Intent intent = new Intent(context, SetupWizardActivity.class); + intent.setAction(ACTION_RESUME_SETUP); + return intent; + } + + @Override + public Boolean parseResult(int resultCode, @Nullable Intent intent) { + return resultCode == RESULT_OK; + } + } + private static class ProfileProvisionContract extends ActivityResultContract { @NonNull @Override From 657f729facfb55b0e944ced8b0e185889bbfe89b Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 17 Mar 2021 16:33:21 +0800 Subject: [PATCH 108/355] SetupWizardActivity: use a separate action for finalizing provision --- .../java/net/typeblog/shelter/ui/DummyActivity.java | 2 +- .../typeblog/shelter/ui/SetupWizardActivity.java | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java b/app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java index b0d7e24..ddb5bf9 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java @@ -238,7 +238,7 @@ public class DummyActivity extends Activity { .setBoolean(LocalStorageManager.PREF_HAS_SETUP, true); LocalStorageManager.getInstance() .setBoolean(LocalStorageManager.PREF_IS_SETTING_UP, false); - Intent intent = new Intent(Intent.ACTION_MAIN); + Intent intent = new Intent(SetupWizardActivity.ACTION_PROFILE_PROVISIONED); intent.setComponent(new ComponentName(this, SetupWizardActivity.class)); startActivity(intent); Toast.makeText(this, getString(R.string.provision_finished), Toast.LENGTH_LONG).show(); diff --git a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java index a4ace0f..9508232 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java @@ -33,6 +33,7 @@ public class SetupWizardActivity extends AppCompatActivity { // finished by the system, but the Shelter inside the profile has never been brought up // due to the user having not clicked on the notification yet. public static final String ACTION_RESUME_SETUP = "net.typeblog.shelter.RESUME_SETUP"; + public static final String ACTION_PROFILE_PROVISIONED = "net.typeblog.shelter.PROFILE_PROVISIONED"; private DevicePolicyManager mPolicyManager = null; private LocalStorageManager mStorage = null; @@ -43,6 +44,16 @@ public class SetupWizardActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + // The user could click on the "finish provisioning" notification while having removed + // this activity from the recents stack, in which case the notification will start a new + // instance of activity + if (ACTION_PROFILE_PROVISIONED.equals(getIntent().getAction()) && Utility.isWorkProfileAvailable(this)) { + // ...in which case we should finish immediately and go back to MainActivity + startActivity(new Intent(this, MainActivity.class)); + finish(); + return; + } + setContentView(R.layout.activity_setup_wizard); mPolicyManager = getSystemService(DevicePolicyManager.class); mStorage = LocalStorageManager.getInstance(); @@ -62,7 +73,7 @@ public class SetupWizardActivity extends AppCompatActivity { super.onNewIntent(intent); // DummyActivity will start this activity with an empty intent // once the provision is finalized - if (Utility.isWorkProfileAvailable(this)) + if (ACTION_PROFILE_PROVISIONED.equals(intent.getAction()) && Utility.isWorkProfileAvailable(this)) finishWithResult(true); } From f63272baee24c38bef6e8ff01f2dd830bbc425ce Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 17 Mar 2021 16:36:44 +0800 Subject: [PATCH 109/355] i18n: make it clear that users should pull down notification center --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2f40352..56b4c86 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -22,7 +22,7 @@ Setup failed We regret to inform you that we were not able to set up Shelter for you.\n\nIf you did not cancel the setup manually, then the reason for the failure is most commonly due to a heavily modified system, or a conflict between Shelter and other Work Profile managers. Unfortunately, there is not much that we could do about this.\n\nClick "Next" to exit. Action required - You should now be seeing a notification from Shelter. Please click on that notification to finish the setup process.\n\nIf you do not see the notification, make sure your device is not in Do Not Disturb mode and try again.\n\nTo reset Shelter and start over, you can clear the data of Shelter in Settings. + You should now be seeing a notification from Shelter. Please click on that notification to finish the setup process.\n\nIf you do not see the notification, make sure your device is not in Do Not Disturb mode and try pulling down the notification center.\n\nTo reset Shelter and start over, you can clear the data of Shelter in Settings. Shelter Important From 1c28f100db49aa45580e6f6971c14eae3cf0ba63 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 17 Mar 2021 16:46:57 +0800 Subject: [PATCH 110/355] i18n: remove unused strings due to refactor --- app/src/main/res/values/strings.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 56b4c86..ce950ec 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,6 +1,5 @@ Shelter - You are about to set up Shelter.\n\nThis app depends on the Work Profile feature of Android to isolate the apps. If you use a vendor / custom ROM that breaks related features (e.g. MIUI), you should now QUIT and DO NOT use this app.\n\nIf you choose to continue, Shelter will set up Work Profile for you.\n\nIf you are a developer and would like to make Shelter work on those incompatible ROMs like MIUI, pull requests are always welcome. The developer takes ABSOLUTELY NO RESPONSIBILITY if you break your device running an incompatible ROM.\n\nYou will need to receive a notification in order to finish setup, please make sure your device is NOT on Do Not Disturb mode. Bye Continue Shelter @@ -91,7 +90,6 @@ https://www.patreon.com/PeterCxy - Shelter is still being set up. You should be seeing a notification soon from Shelter, which you must click on to finish the setup process. If you do not see the notification, please disable Do Not Disturb mode and try again. Shelter setup complete. Now restarting Shelter. If Shelter didn\'t start automatically, you may launch it again from your launcher. Permission is denied or Unsupported device Work profile not found. Please restart the app to re-provision the profile. From af8337f2c85e4960410bc48b539ec30170ed55ca Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 17 Mar 2021 21:18:52 +0800 Subject: [PATCH 111/355] add setup wizard to changelog --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 082e14f..1f6d69b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +Unreleased +=== + +- Revamped the initial setup process to include a full setup guide for better clarity and less confusion. + 1.6 === From 15de66412e956a5cf520437a7a6e14d13d6c9d87 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 18 Mar 2021 15:59:21 +0800 Subject: [PATCH 112/355] cleanup: MainActivity: cleanup class member variable --- app/src/main/java/net/typeblog/shelter/ui/MainActivity.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java index a0cc021..6ef3f80 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java @@ -53,7 +53,6 @@ public class MainActivity extends AppCompatActivity { registerForActivityResult(new SetupWizardActivity.ResumeSetupContract(), this::setupWizardCb); private LocalStorageManager mStorage = null; - private DevicePolicyManager mPolicyManager = null; // Flag to avoid double-killing our services while restarting private boolean mRestarting = false; @@ -72,9 +71,8 @@ public class MainActivity extends AppCompatActivity { setContentView(R.layout.activity_main); setSupportActionBar(findViewById(R.id.main_toolbar)); mStorage = LocalStorageManager.getInstance(); - mPolicyManager = getSystemService(DevicePolicyManager.class); - if (mPolicyManager.isProfileOwnerApp(getPackageName())) { + if (getSystemService(DevicePolicyManager.class).isProfileOwnerApp(getPackageName())) { // We are now in our own profile // We should never start the main activity here. android.util.Log.d("MainActivity", "started in user profile. stopping."); From 530cee79de4f8fdfe9d00629cf687c7050cb70d3 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 18 Mar 2021 16:30:58 +0800 Subject: [PATCH 113/355] refactor: MainActivity: use the new result contract to choose APKs --- .../net/typeblog/shelter/ui/MainActivity.java | 55 ++++++++++--------- .../net/typeblog/shelter/util/Utility.java | 28 ++++++++++ 2 files changed, 58 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java index 6ef3f80..499d8ae 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java @@ -15,6 +15,7 @@ import android.view.MenuItem; import android.widget.Toast; import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; @@ -45,12 +46,17 @@ public class MainActivity extends AppCompatActivity { private static final int REQUEST_START_SERVICE_IN_WORK_PROFILE = 2; private static final int REQUEST_TRY_START_SERVICE_IN_WORK_PROFILE = 4; - private static final int REQUEST_DOCUMENTS_CHOOSE_APK = 5; private final ActivityResultLauncher mStartSetup = registerForActivityResult(new SetupWizardActivity.SetupWizardContract(), this::setupWizardCb); private final ActivityResultLauncher mResumeSetup = registerForActivityResult(new SetupWizardActivity.ResumeSetupContract(), this::setupWizardCb); + private final ActivityResultLauncher mSelectApk = + registerForActivityResult( + new Utility.ActivityResultContractInputWrapper<>( + new ActivityResultContracts.OpenDocument(), + new String[]{"application/vnd.android.package-archive"}), + this::onApkSelected); private LocalStorageManager mStorage = null; @@ -364,10 +370,7 @@ public class MainActivity extends AppCompatActivity { "shelter-freeze-all", getString(R.string.freeze_all_shortcut)); return true; case R.id.main_menu_install_app_to_profile: - Intent openApkIntent = new Intent(Intent.ACTION_OPEN_DOCUMENT); - openApkIntent.addCategory(Intent.CATEGORY_OPENABLE); - openApkIntent.setType("application/vnd.android.package-archive"); - startActivityForResult(openApkIntent, REQUEST_DOCUMENTS_CHOOSE_APK); + mSelectApk.launch(null); return true; case R.id.main_menu_show_all: Runnable update = () -> { @@ -397,6 +400,27 @@ public class MainActivity extends AppCompatActivity { return super.onOptionsItemSelected(item); } + private void onApkSelected(Uri uri) { + if (uri == null) return; + UriForwardProxy proxy = new UriForwardProxy(getApplicationContext(), uri); + + try { + mServiceWork.installApk(proxy, new IAppInstallCallback.Stub() { + @Override + public void callback(int result) { + runOnUiThread(() -> { + // The other side will have closed the Fd for us + if (result == RESULT_OK) + Toast.makeText(MainActivity.this, + R.string.install_app_to_profile_success, Toast.LENGTH_LONG).show(); + }); + } + }); + } catch (RemoteException e) { + // Well, I don't know what to do then + } + } + @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { if (requestCode == REQUEST_TRY_START_SERVICE_IN_WORK_PROFILE) { @@ -419,26 +443,7 @@ public class MainActivity extends AppCompatActivity { registerStartActivityProxies(); startKiller(); buildView(); - } else if (requestCode == REQUEST_DOCUMENTS_CHOOSE_APK && resultCode == RESULT_OK && data != null) { - Uri uri = data.getData(); - UriForwardProxy proxy = new UriForwardProxy(getApplicationContext(), uri); - - try { - mServiceWork.installApk(proxy, new IAppInstallCallback.Stub() { - @Override - public void callback(int result) { - runOnUiThread(() -> { - // The other side will have closed the Fd for us - if (result == RESULT_OK) - Toast.makeText(MainActivity.this, - R.string.install_app_to_profile_success, Toast.LENGTH_LONG).show(); - }); - } - }); - } catch (RemoteException e) { - // Well, I don't know what to do then - } - } else { + } else { super.onActivityResult(requestCode, resultCode, data); } } diff --git a/app/src/main/java/net/typeblog/shelter/util/Utility.java b/app/src/main/java/net/typeblog/shelter/util/Utility.java index 21e312d..f5f5686 100644 --- a/app/src/main/java/net/typeblog/shelter/util/Utility.java +++ b/app/src/main/java/net/typeblog/shelter/util/Utility.java @@ -29,6 +29,10 @@ import android.provider.MediaStore; import android.provider.Settings; import android.widget.Toast; +import androidx.activity.result.contract.ActivityResultContract; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + import net.typeblog.shelter.R; import net.typeblog.shelter.receivers.ShelterDeviceAdminReceiver; import net.typeblog.shelter.services.IShelterService; @@ -501,4 +505,28 @@ public class Utility { .setSmallIcon(icon) .build(); } + + // A wrapper over arbitrary ActivityResultContract that provides + // hardcoded input parameters and do not accept input with launch() + public static class ActivityResultContractInputWrapper> + extends ActivityResultContract { + private final T mInner; + private final I mInput; + + public ActivityResultContractInputWrapper(T inner, I input) { + mInner = inner; + mInput = input; + } + + @NonNull + @Override + public Intent createIntent(@NonNull Context context, Void input) { + return mInner.createIntent(context, mInput); + } + + @Override + public O parseResult(int resultCode, @Nullable Intent intent) { + return mInner.parseResult(resultCode, intent); + } + } } From 0a7721cd507784ef6372cafd099d75ca63c194b5 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 18 Mar 2021 16:32:23 +0800 Subject: [PATCH 114/355] MainActivity: derp --- app/src/main/java/net/typeblog/shelter/ui/MainActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java index 499d8ae..a319b49 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java @@ -443,7 +443,7 @@ public class MainActivity extends AppCompatActivity { registerStartActivityProxies(); startKiller(); buildView(); - } else { + } else { super.onActivityResult(requestCode, resultCode, data); } } From cc5c4e41be917d4ab0e3d4a2cad5f06d1dfb7117 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 18 Mar 2021 16:33:55 +0800 Subject: [PATCH 115/355] app: build.gradle: bump version to 1.7-dev1 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0b9c96c..fb0b03e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "net.typeblog.shelter" minSdkVersion 24 targetSdkVersion 30 - versionCode 17 - versionName "1.6" + versionCode 18 + versionName "1.7-dev1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { From 8692e558fce50d34e75be318a5a0a2e5c5cb9b6e Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 18 Mar 2021 16:48:34 +0800 Subject: [PATCH 116/355] update SetupWizardLibrary * for dependency upgrades --- libs/SetupWizardLibrary | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/SetupWizardLibrary b/libs/SetupWizardLibrary index 389cc92..15dce31 160000 --- a/libs/SetupWizardLibrary +++ b/libs/SetupWizardLibrary @@ -1 +1 @@ -Subproject commit 389cc9256395bbe3da587cd2ec7ffc5bf8439487 +Subproject commit 15dce316a229f6ab9b1d6d112bca7a10564336e2 From e52f38bd037111689b61838321588f18221c0d6f Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 18 Mar 2021 16:53:33 +0800 Subject: [PATCH 117/355] app: update appcompat library to 1.3.0-beta01 * Otherwise the linter won't let us do a release build due to it depending on an old Fragment version --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index fb0b03e..bc14cf6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -37,7 +37,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.legacy:legacy-support-core-ui:1.0.0' implementation 'androidx.fragment:fragment:1.3.1' - implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.appcompat:appcompat:1.3.0-beta01' implementation 'androidx.preference:preference:1.1.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'com.google.android.material:material:1.3.0' From 0a4b09dbdbde9cbb7bb04957891ea6defd743434 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 18 Mar 2021 17:00:54 +0800 Subject: [PATCH 118/355] app: build.gradle: disable Fragment version check for now --- app/build.gradle | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/build.gradle b/app/build.gradle index bc14cf6..5e32ab9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -30,6 +30,10 @@ android { disable 'MissingTranslation' // We don't need Google App Indexing disable 'GoogleAppIndexingWarning' + // Some dependencies still pull in Fragment 1.2.x + // Let's just ignore the error for now + // We don't really hit the broken use-cases for now + disable 'InvalidFragmentVersionForActivityResult' } } From e67251267e497cc478e24a0488c340d4e2b28ef4 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 18 Mar 2021 17:02:03 +0800 Subject: [PATCH 119/355] app: build.gradle: disable ExtraTranslation lint * we will let Weblate handle these --- app/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/app/build.gradle b/app/build.gradle index 5e32ab9..040babc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -28,6 +28,7 @@ android { lintOptions { // We have community-contributed translations. Do not let them block releases. disable 'MissingTranslation' + disable 'ExtraTranslation' // We don't need Google App Indexing disable 'GoogleAppIndexingWarning' // Some dependencies still pull in Fragment 1.2.x From 5dd68e8c383cc4161a51bb2e05fae2c1b5c0ec47 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Mar 2021 08:40:13 +0800 Subject: [PATCH 120/355] README: rewrite --- README.md | 111 ++++++++++++++++++++---------------------------------- 1 file changed, 40 insertions(+), 71 deletions(-) diff --git a/README.md b/README.md index e37c9f4..56c9671 100644 --- a/README.md +++ b/README.md @@ -1,80 +1,49 @@ -![Shelter](https://cgit.typeblog.net/Shelter/plain/art/ic_launcher_egg-web.png) +Shelter +=== -Get it on Google Play -Get it on F-Droid +Shelter is a Free and Open-Source (FOSS) app that leverages the "Work Profile" feature of Android to provide an isolated space that you can install or clone apps into. -You can also download APKs released and signed directly by me [here](https://github.com/PeterCxy/Shelter/releases), in case you want the full-featured version but do not want to go through uninstalling the Google Play version and re-installing the F-Droid version. +Downloads +=== + +- [Google Play](https://play.google.com/store/apps/details?id=net.typeblog.shelter) (Signed by PeterCxy) +- [F-Droid](https://f-droid.org/app/net.typeblog.shelter) (Signed by F-Droid) +- [Custom F-Droid Repository](https://fdroid.typeblog.net) (Signed by PeterCxy, contains latest development versions) + +You cannot switch between versions listed above that have different signature without uninstalling Shelter first. + +Features +=== + +- Installing apps inside a work profile for isolation +- "Freeze" apps inside the work profile to prevent them from running or being woken up when you are not actively using them +- Installing two copies of the same app on the same device + +Discussion & Support +=== + +- [Mailing List](https://lists.sr.ht/~petercxy/shelter) +- Matrix Chat Room: #shelter:neo.angry.im + +__The GitHub Issue list is not checked regularly. Please use the mailing list instead.__ + +Caveats & Known Issues +=== + +- Some caveats and known issues are discussed during the setup process of Shelter. __Please read through text in the setup wizard carefully__. +- Shelter is only as safe as the Work Profile implementation of the Android OS you are using. For details, see + +Contributing +=== + +- [Weblate](https://weblate.typeblog.net/projects/shelter/shelter/) for contributing translations +- Sponsor me on [Patreon](https://www.patreon.com/PeterCxy) Translation status -Note: main repository: . __The GitHub repository is only a mirror__. I do not guarantee the GitHub repository will be up-to-date. - -For bug reports and patches (pull requests), please use the following contact methods: - -- Mailing List (SourceHut): -- Matrix Chat Room: #shelter:neo.angry.im - -For translations, please use our Weblate interface at to submit new translated strings for Shelter. - -On GitHub, any new issues or pull requests will not be read or accepted. Please use the contacts listed above. - -Note: The F-Droid version is automatically built and signed by the F-Droid server on each update of Shelter. The build is not managed by the author and could lag behind the updates from Play Store and this repository for several days due to high server load. - - -Shelter - Isolate your Big Brother Apps / Multiple Accounts +Uninstalling === -Shelter is a Free and Open-Source (FOSS) app that leverages the "Work Profile" feature of Android to provide an isolated space that you can install or clone apps into. - -Shelter comes with absolutely no advertisement / statistics / tracking SDKs bundled with it. All source code is available in this public Git repository and the sources are licensed under WTFPL. - -This app depends on your Android system's implementation of Work Profile. Some vendor / custom ROMs may have a broken implementation that may cause crashes and even bricking of your device. One such example is MIUI from Xiaomi. I currently provide no support for such ROMs because I personally do not own any of these devices. If you are running Shelter on these ROMs, you are on your own. If any developer out there own these devices and could make Shelter run on these ROMs, please send pull requests and I'll be happy to merge them. - -Features / Use Cases -=== - -1. Run "Big Brother" apps inside the isolated profile so they cannot access your data / files outside the profile -2. "Freeze" (disable) background-heavy, tracking-heavy or seldom-used apps when you don't need them. This is especially true if you use apps from Chinese companies like Baidu, Alibaba, Tencent. -3. Clone apps to use two accounts on one device - -Known Issues -=== - -1. "Split APKs" (APKs that consist of multiple sub-packages) cannot be cloned properly. This includes a lot of applications on the Play Store (e.g. WhatsApp). When possible, use "Install APK into Shelter" from the menu instead. -2. File Shuttle is not supported on Android 10 -3. Shelter must be installed in INTERNAL STORAGE, otherwise the initialization process will fail. -4. You have to click a notification in order to finish the initialization process due to the limitations of background apps introduced since Android 10. When initializing, please make sure you are not in "Do Not Disturb" mode. - -Caveats -=== - -Shelter is __not__ a full sandbox implementation. It cannot protect you from: - -1. Security bugs of the Android system or Linux kernel -2. Backdoors installed in your Android system (so please use an open-source ROM if you are concerned about this) -3. Backdoors installed into the firmwares (no way to work around this) -4. Any other bugs or limitations imposed by the Android system. (i.e. If Android chooses to expose some information into the work profile, there is nothing I could do about it) - -For information that may still be exposed to the work profile, please refer to this support article by Google: . Note that though the section "what data about my device is visible to my organization" is about the information visible to __administrator__, not necessarily every application, the fact that those information are not totally isolated is still a big caveat to the work profile feature. - -Also, Shelter cannot create more than 1 work profile on one Android device, and cannot co-exist with any other apps that manages a Work Profile. This is due to the limitations of the Android system, and I can do nothing about this. - -FAQS -=== - -**Q**: Why not use Island by OasisFeng, the creator of Greenify? -**A**: ~~Simply because it is not an FOSS app and it bundles with non-free SDKs. Note that this doesn't necessarily mean that Island has anti-features like tracking (and I don't think it has either), it's just that I wrote Shelter as an FOSS replacement of it. There is no other reason why one would prefer Shelter over Island except for this one.~~ This is no longer true. Island is now also FOSS, but I am keeping this project for my stupid affection for WTFPL. - -**Q**: Why does Shelter always run in background? -**A**: Please try removing Shelter from "Recent Apps" every time you close it. If it still persists in your notifications and eating up battery, you might have encountered a bug. Please file a bug report. - -**Q**: How do I uninstall Shelter from my device? -**A**: 1) Go to Settings -> Accounts to remove the work profile; 2) Go to Settings -> Security -> Advanced -> Device admin apps to remove Shelter from Device Admin apps; 3) Uninstall Shelter normally. - -**Q**: If I encounter bugs, how do I report them? -**A**: Please send a message to our mailing list . You may also join our Matrix chat room at #shelter:neo.angry.im. - -**Q**: How do I support the project? -**A**: You can submit issues if you find a bug or have an idea about features of Shelter; you may also contribute code to this project if you can code; providing translations is also welcomed. If you have some extra money lying around, you can also [support me on Patreon](https://www.patreon.com/PeterCxy). +To uninstall Shelter, please delete the work profile first in Settings -> Accounts, and then uninstall the Shelter app normally. From 50331986c92999457722fe338f4a7869723857cf Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 24 Mar 2021 08:41:27 +0800 Subject: [PATCH 121/355] README: make it clear that PRs are not accepted on GitHub --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 56c9671..5a9d26b 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ Discussion & Support - [Mailing List](https://lists.sr.ht/~petercxy/shelter) - Matrix Chat Room: #shelter:neo.angry.im -__The GitHub Issue list is not checked regularly. Please use the mailing list instead.__ +__The GitHub Issue list and pull requests are not checked regularly. Please use the mailing list instead.__ Caveats & Known Issues === From 912e9ab16bedf970eb9941736888bf6bdac2e073 Mon Sep 17 00:00:00 2001 From: Benjamin Torres Date: Fri, 26 Mar 2021 07:40:45 +0000 Subject: [PATCH 122/355] Translated using Weblate (Spanish) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/es/ --- app/src/main/res/values-es/strings.xml | 116 ++++++++++++++++++++++++- 1 file changed, 115 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index a6b3dae..bae863f 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -1,2 +1,116 @@ - \ No newline at end of file + + Servicio Shelter + Shelter se esta ejecutando actualmente… + Suspensión automática pendiente + Adios + Continuar + Servicio de aislamiento + Shelter necesita convertirse en el administrador del dispositivo para realizar tareas de aislamiento. + Elige un archivo de imagen + Importante + Haz click aquí para finalizar la configuración de Shelter + Manipular aplicaciones ocultas en la lista podría causar fallos y toda clase de comportamientos inesperados. Sin embargo, esta característica podría ser de utilidad cuando las ROMs personalizadas del fabricante no habilitan todas las aplicaciones del sistema necesarias dentro del perfil de trabajo por defecto. Si continuas, estas por tu cuenta. + Abrir interfaz de documentos + Configuraciones + Interacción + Pasarela de archivos + Felicitaciones! Se encuentra a un click de terminar la configuración de Shelter. + Configuración de Shelter completa. Reiniciando Shelter a continuación. Si Shelter no se inicia de manera automática puedes iniciarlo nuevamente desde tu lanzador de aplicaciones. + Permiso denegado o dispositivo no soportado + Perfil de trabajo no encontrado. Por favor reinicia la aplicación para aprovisionar el perfil. + No se puede proveer un perfil de trabajo. Puedes intentar de nuevo reiniciando Shelter. + Parece que has deshabilitado el modo de trabajo mientras Shelter se reiniciaba. Si lo has habilitado ahora, por favor reinicia Shelter de nuevo. + Aplicación \"%s\" clonada exitosamente + Aplicación \"%s\" desinstalada exitosamente + Aplicación \"%s\" suspendida exitosamente + Aplicación \"%s\" reiniciada exitosamente + Shelter va a suspender de manera automática las aplicaciones iniciadas con \"Descongelar e iniciar\" en el siguiente bloqueo de pantalla. + No se pueden clonar aplicaciones del sistema a un perfil del cual Shelter no tiene el control. + Todas las aplicaciones en la lista de \"suspensión automática\" han sido suspendidas exitosamente. + Clonar aplicaciones que no son del sistema a otro perfil actualmente no es posible en MIUI. Por favor clona la tienda de aplicaciones del sistema (ej: Play Store) dentro del otro perfil e instala aplicaciones desde ahí. + Por defecto, Shelter no te solicitará permisos individuales. Sin embargo, una vez que procedas con el proceso de instalación, Shelter tratara de configurar un perfil de trabajo y por lo tanto se convertirá en administrador de dicho perfil. +\n +\nEsto proporcionara a Shelter una lista extensa de permisos dentro del perfil, comparables a los del administrador del dispositivo, aunque confinado al perfil. Ser el administrador de perfil es necesario para la mayoría de la funcionalidad de Shelter. +\n +\nAlgunas características avanzadas de Shelter podrían requerir mas permisos fuera del perfil de trabajo. Cuando sean necesarios, Shelter te solicitara esos permisos de manera individual cuando habilites tales características. + Shelter es desarrollado y probado en derivados de Android AOSP. Esto incluye AOSP(Android Open Source Project), Google Android(en Pixel) y la mayoría de las ROMs basadas en Android AOSP como LineageOS. Si tu dispositivo esta ejecutando alguno de los derivados de Android listados anteriormente, ¡felicitaciones! Shelter probablemente funcionara correctamente en tu dispositivo. +\n +\nAlgunos fabricantes de dispositivos introducen personalizaciones demasiado invasivas dentro del código fuente de Android lo cual resulta en conflictos, incompatibilidades y comportamientos inesperados. Algunas ROMs personalizadas también pueden introducir cambios que rompen con la compatibilidad pero generalmente son raros en comparación con las incompatibilidades introducidas por los fabricantes. +\n +\nShelter es únicamente una interfaz a la característica del perfil de trabajo provista por el sistema. Si la característica provista por el sistema esta dañada o no es estandar Shelter no puede resolver el problema mágicamente por si mismo. Si actualmente estas usando una versión de Android modificada por el fabricante de la cual se sabe que incumple con los perfiles de trabajo has sido advertido. Puedes proceder de todos modos, pero no hay garantia de que Shelter se comporte de manera adecuada bajo esas circunstancias. + Presenta una aplicación de cámara falsa a otras aplicaciones, permitiéndote elegir una imagen arbitraria de la interfaz de documentos (y a la pasarela de archivos, si se encuentra habilitado) como la fotografía tomada. Esto habilita la pasarela de archivos para cualquier aplicaciones que tenga soporte para invocar otras aplicaciones para tomar una fotografía incluso si no soportan la interfaz de documentos de manera nativa. + No se pueden desinstalar aplicaciones del sistema en un perfil del cual Shelter no tiene control. + No se pueden agregar accesos directos a tu lanzador de aplicaciones. Por favor contacta al desarrollador para mas información. + Operaciones para \"%s\" + Por favor espera… + Estamos tratando de inicializar el perfil de trabajo y configurar Shelter en tu dispositivo. + La configuración falló + Ahora estamos listos para configurar Shelter para ti. Por favor primero asegurate de que tu dispositivo no se encuentra en modo no molestar debido a que necesitaras hacer click en una notificación mas tarde para finalizar el proceso de instalación. +\n +\nCuando estés listo, haz click en \"Siguiente\" para iniciar el proceso de instalación. + Lamentamos informarte que no fuimos capaces de configurar Shelter para ti. +\n +\nSi no cancelaste la instalación de manera manual, entonces una de las razones del fallo es comúnmente debido a un sistema fuertemente modificado o a un conflicto entre Shlter y otros administradores del perfil de trabajo. Desafortunadamente, no hay mucho que podamos hacer sobre esto. +\n +\nHaz click en Siguiente para Salir. + Acción requerida + Ahora debieras estar viendo la notificación de Shelter. Por favor haz click en esa notificación para finalizar el proceso de configuración. +\n +\nSi no ves la notificación, asegúrate de que tu dispositivo no esta en modo No molestar y trata de abrir el centro de notificaciones. +\n +\nPara reiniciar Shelter e iniciar de nuevo, puedes limpiar los datos de Shelter en la configuración. + Suspender ahora + Instalando... + Principal + Shelter + [Suspendida]%s + Operación en lote + Clonar a Shelter (perfil de trabajo) + Clonar al perfil principal + Desinstalar + Suspender + Reanudar + Iniciar + Crear un acceso directo para suspender y/o iniciar + Reanudar e iniciar + Auto suspender + Permitir Widgets en el perfil principal + Cuando esta habilitado, seras capaz de buscar / ver / seleccionar / copiar archivos dentro de Shelter del perfil principal y viceversa. Únicamente a través de la interfaz de documentos (llamada Archivos o Documentos en tu lanzador de aplicaciones) o aplicaciones con soporte para interfaz de archivos (únicamente obtienen acceso temporal a los archivos que escogiste en la interfaz de documentos), mientras aun pertenecen al sistema de archivos aislado. + Selector de imágenes como simulador de cámara + Bloquear búsqueda de contactos + Denegar acceso del perfil principal a los contactos dentro del perfil de trabajo. + Servicios + Retraso de la suspensión automática + NO suspendas aplicaciones en el fondo (con actividad visible) cuando bloquees la pantalla. Esto puede ser útil para aplicaciones como reproductores de música, pero vas a necesitar suspenderlas a través de \"Acceso directo a suspensión por lote\" más tarde. + Versión + Código fuente + Traducir + Reporte de errores/ Seguimiento de problemas + Acceso directo creado en tu lanzador de aplicaciones. + Shelter necesita el permiso Estadísticas de uso para hacer esto. Por favor habilita el permiso para AMBAS de las aplicaciones Shelter mostradas en la ventana siguiente a que presiones \"Ok\". No hacerlo causara que esta característica no funcione adecuadamente. + No se puede lanzar la aplicación %s por que no tiene interfaz gráfica. + Shelter necesita acceder a Todos los archivos para el selector de archivos. Por favor habilita el permiso para AMBAS aplicaciones Shelter (Personal / Trabajo) en la ventana siguiente al presionar \"Ok\". + Shelter necesita Mostrarse sobre otras aplicaciones para que la función de pasarela de archivos funciones correctamente. Por favor habilita el permiso para AMBAS aplicaciones Shelter mostradas en la ventana después de que hagas click en \"Ok\". Este permiso es usado para iniciar el servicio de pasarela en segundo plano. + Continuar de todos modos + Bienvenido a Shelter + Shelter es una aplicación que te ayuda a ejecutar otras aplicaciones en un perfil aislado. Lo hace haciendo uso de la característica Perfil de trabajo de Android. +\n +\nHaz click en \"Siguiente\" y te proveeremos con mas información sobre Shelter y te guiaremos a través del proceso de instalación +\n +\nTe sugerimos que leas todas las paginas siguientes cuidadosamente. + Sobre los permisos + ¿Listo\? + Compatibilidad + Buscar + Suspensión en lote + Crear un acceso directo a suspensión en lote + Suspender + Instalar APK dentro de Shelter + Instalación de aplicación en perfil de trabajo finalizada. + Mostrar todas las aplicaciones + Servicio de auto suspensión + Cuando la pantalla esta bloqueada, automáticamente suspende las aplicaciones iniciadas con \"Acceso directo a Reanudar e iniciar\". + Omitir aplicaciones de fondo + Acerca de + \ No newline at end of file From 8806311c64c1c85d6ff9613a8c3450462f159179 Mon Sep 17 00:00:00 2001 From: gnuhead-chieb Date: Wed, 31 Mar 2021 00:27:05 +0000 Subject: [PATCH 123/355] Translated using Weblate (Japanese) Currently translated at 91.8% (90 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/ja/ --- app/src/main/res/values-ja/strings.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 26287b5..f56ccd5 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -86,4 +86,16 @@ ファイル同期 有効にした場合、メインプロファイルからShelter内のファイルを管理できるようになります。Shelter内のファイルへはDocument UI(標準ファイラー)のみから隔離されたファイルシステムにアクセスできます。 ファイル同期が正常に機能するためにShelterに他のアプリに重ねて表示を許可する必要があります。OKをタップした後、表示されるShelterアプリの個人用/仕事用の二つともに権限を付与してください。この権限はファイル同期サービスがバックグラウンドで動作するために使われます。 + Shelterはアプリを隔離されたプロファイル内で実行するためのツールです。このアプリではAndroidの 仕事用プロファイル 機能を利用しています。 +\n +\n「次へ」をタップするとShelterの詳細が表示されセットアップに進みます。 +\n +\n次のページの項目をよく読んでおくことを推奨します。 + 互換性 + 準備はよろしいですか? + しばらくお待ちください… + 仕事用プロファイルを設定してShelterをセットアップしようとしています。 + セットアップに失敗しました + 操作が必要です + Shelterへようこそ \ No newline at end of file From 7f9e62ac5b6b237016aefd8d2f74c33d22f68d82 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 2 Apr 2021 09:25:49 +0800 Subject: [PATCH 124/355] WTFPL -> GPLv3 --- LICENSE | 679 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 670 insertions(+), 9 deletions(-) diff --git a/LICENSE b/LICENSE index 456c488..f288702 100644 --- a/LICENSE +++ b/LICENSE @@ -1,13 +1,674 @@ - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - Version 2, December 2004 + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 - Copyright (C) 2004 Sam Hocevar + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. - Everyone is permitted to copy and distribute verbatim or modified - copies of this license document, and changing it is allowed as long - as the name is changed. + Preamble - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + The GNU General Public License is a free, copyleft license for +software and other kinds of works. - 0. You just DO WHAT THE FUCK YOU WANT TO. + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. From 68b0b8599337260b11fbcbf65e24d1ce2de5042e Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 2 Apr 2021 09:49:56 +0800 Subject: [PATCH 125/355] refactor: MainActivity: use contracts instead of startActivityForResult --- .../net/typeblog/shelter/ui/MainActivity.java | 66 ++++++++++--------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java index a319b49..3fd6d4a 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java @@ -14,6 +14,7 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.widget.Toast; +import androidx.activity.result.ActivityResult; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.NonNull; @@ -44,9 +45,6 @@ public class MainActivity extends AppCompatActivity { public static final String BROADCAST_CONTEXT_MENU_CLOSED = "net.typeblog.shelter.broadcast.CONTEXT_MENU_CLOSED"; public static final String BROADCAST_SEARCH_FILTER_CHANGED = "net.typeblog.shelter.broadcast.SEARCH_FILTER_CHANGED"; - private static final int REQUEST_START_SERVICE_IN_WORK_PROFILE = 2; - private static final int REQUEST_TRY_START_SERVICE_IN_WORK_PROFILE = 4; - private final ActivityResultLauncher mStartSetup = registerForActivityResult(new SetupWizardActivity.SetupWizardContract(), this::setupWizardCb); private final ActivityResultLauncher mResumeSetup = @@ -57,6 +55,11 @@ public class MainActivity extends AppCompatActivity { new ActivityResultContracts.OpenDocument(), new String[]{"application/vnd.android.package-archive"}), this::onApkSelected); + // Logic of the following intents are quite complicated; use the generic contract for more control + private final ActivityResultLauncher mTryStartWorkService = + registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), this::tryStartWorkServiceCb); + private final ActivityResultLauncher mBindWorkService = + registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), this::bindWorkServiceCb); private LocalStorageManager mStorage = null; @@ -147,7 +150,22 @@ public class MainActivity extends AppCompatActivity { finish(); return; } - startActivityForResult(intent, REQUEST_TRY_START_SERVICE_IN_WORK_PROFILE); + mTryStartWorkService.launch(intent); + } + + private void tryStartWorkServiceCb(ActivityResult result) { + if (result.getResultCode() == RESULT_OK) { + // RESULT_OK is from DummyActivity. The work profile is enabled! + bindWorkService(); + } else { + // In this case, the user has been presented with a prompt + // to enable work mode, but we have no means to distinguish + // "ok" and "cancel", so the only way is to tell the user + // to start again. + Toast.makeText(this, + getString(R.string.work_mode_disabled), Toast.LENGTH_LONG).show(); + finish(); + } } private void bindWorkService() { @@ -155,7 +173,18 @@ public class MainActivity extends AppCompatActivity { Intent intent = new Intent(DummyActivity.START_SERVICE); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); Utility.transferIntentToProfile(this, intent); - startActivityForResult(intent, REQUEST_START_SERVICE_IN_WORK_PROFILE); + mBindWorkService.launch(intent); + } + + private void bindWorkServiceCb(ActivityResult result) { + if (result.getResultCode() == RESULT_OK && result.getData() != null) { + Bundle extra = result.getData().getBundleExtra("extra"); + IBinder binder = extra.getBinder("service"); + mServiceWork = IShelterService.Stub.asInterface(binder); + registerStartActivityProxies(); + startKiller(); + buildView(); + } } private void startKiller() { @@ -420,31 +449,4 @@ public class MainActivity extends AppCompatActivity { // Well, I don't know what to do then } } - - @Override - protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { - if (requestCode == REQUEST_TRY_START_SERVICE_IN_WORK_PROFILE) { - if (resultCode == RESULT_OK) { - // RESULT_OK is from DummyActivity. The work profile is enabled! - bindWorkService(); - } else { - // In this case, the user has been presented with a prompt - // to enable work mode, but we have no means to distinguish - // "ok" and "cancel", so the only way is to tell the user - // to start again. - Toast.makeText(this, - getString(R.string.work_mode_disabled), Toast.LENGTH_LONG).show(); - finish(); - } - } else if (requestCode == REQUEST_START_SERVICE_IN_WORK_PROFILE && resultCode == RESULT_OK) { - Bundle extra = data.getBundleExtra("extra"); - IBinder binder = extra.getBinder("service"); - mServiceWork = IShelterService.Stub.asInterface(binder); - registerStartActivityProxies(); - startKiller(); - buildView(); - } else { - super.onActivityResult(requestCode, resultCode, data); - } - } } From a2c400de9ba1ae83a8c8005d207defe6406a7018 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 2 Apr 2021 09:51:45 +0800 Subject: [PATCH 126/355] MainActivity: fail fast in NonNull method --- app/src/main/java/net/typeblog/shelter/ui/MainActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java index 3fd6d4a..961ebb7 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java @@ -217,7 +217,7 @@ public class MainActivity extends AppCompatActivity { } else if (position == 1) { return AppListFragment.newInstance(mServiceWork, true); } else { - return null; + throw new RuntimeException("How did this happen?"); } } From 4e2f498c6c966dbfa70bd5c954285d04f6d21989 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 2 Apr 2021 09:56:49 +0800 Subject: [PATCH 127/355] refactor: MainActivity: do not use resource IDs in switch..case --- .../net/typeblog/shelter/ui/MainActivity.java | 101 +++++++++--------- 1 file changed, 51 insertions(+), 50 deletions(-) diff --git a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java index 961ebb7..ee3aba7 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java @@ -375,58 +375,59 @@ public class MainActivity extends AppCompatActivity { @Override public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case R.id.main_menu_freeze_all: - // This is the same as clicking on the batch freeze shortcut - // so we just forward the request to DummyActivity - Intent intent = new Intent(DummyActivity.PUBLIC_FREEZE_ALL); - intent.setComponent(new ComponentName(this, DummyActivity.class)); - startActivity(intent); - return true; - case R.id.main_menu_settings: - Intent settingsIntent = new Intent(this, SettingsActivity.class); - Bundle extras = new Bundle(); - extras.putBinder("profile_service", mServiceWork.asBinder()); - settingsIntent.putExtra("extras", extras); - startActivity(settingsIntent); - return true; - case R.id.main_menu_create_freeze_all_shortcut: - Intent launchIntent = new Intent(DummyActivity.PUBLIC_FREEZE_ALL); - launchIntent.setComponent(new ComponentName(this, DummyActivity.class)); - launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); - Utility.createLauncherShortcut(this, launchIntent, - Icon.createWithResource(this, R.mipmap.ic_freeze), - "shelter-freeze-all", getString(R.string.freeze_all_shortcut)); - return true; - case R.id.main_menu_install_app_to_profile: - mSelectApk.launch(null); - return true; - case R.id.main_menu_show_all: - Runnable update = () -> { - mShowAll = !item.isChecked(); - item.setChecked(mShowAll); - LocalBroadcastManager.getInstance(this) - .sendBroadcast(new Intent(AppListFragment.BROADCAST_REFRESH)); - }; + int itemId = item.getItemId(); + if (itemId == R.id.main_menu_freeze_all) { + // This is the same as clicking on the batch freeze shortcut + // so we just forward the request to DummyActivity + Intent intent = new Intent(DummyActivity.PUBLIC_FREEZE_ALL); + intent.setComponent(new ComponentName(this, DummyActivity.class)); + startActivity(intent); + return true; + } else if (itemId == R.id.main_menu_settings) { + Intent settingsIntent = new Intent(this, SettingsActivity.class); + Bundle extras = new Bundle(); + extras.putBinder("profile_service", mServiceWork.asBinder()); + settingsIntent.putExtra("extras", extras); + startActivity(settingsIntent); + return true; + } else if (itemId == R.id.main_menu_create_freeze_all_shortcut) { + Intent launchIntent = new Intent(DummyActivity.PUBLIC_FREEZE_ALL); + launchIntent.setComponent(new ComponentName(this, DummyActivity.class)); + launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); + Utility.createLauncherShortcut(this, launchIntent, + Icon.createWithResource(this, R.mipmap.ic_freeze), + "shelter-freeze-all", getString(R.string.freeze_all_shortcut)); + return true; + } else if (itemId == R.id.main_menu_install_app_to_profile) { + mSelectApk.launch(null); + return true; + } else if (itemId == R.id.main_menu_show_all) { + Runnable update = () -> { + mShowAll = !item.isChecked(); + item.setChecked(mShowAll); + LocalBroadcastManager.getInstance(this) + .sendBroadcast(new Intent(AppListFragment.BROADCAST_REFRESH)); + }; - if (!item.isChecked()) { - new AlertDialog.Builder(this) - .setMessage(R.string.show_all_warning) - .setPositiveButton(R.string.first_run_alert_continue, - (dialog, which) -> update.run()) - .setNegativeButton(R.string.first_run_alert_cancel, null) - .show(); - } else { - update.run(); - } - return true; - case R.id.main_menu_documents_ui: - Intent documentsUiIntent = new Intent(Intent.ACTION_VIEW); - documentsUiIntent.setDataAndType(null, "vnd.android.document/root"); - startActivity(documentsUiIntent); - return true; + if (!item.isChecked()) { + new AlertDialog.Builder(this) + .setMessage(R.string.show_all_warning) + .setPositiveButton(R.string.first_run_alert_continue, + (dialog, which) -> update.run()) + .setNegativeButton(R.string.first_run_alert_cancel, null) + .show(); + } else { + update.run(); + } + return true; + } else if (itemId == R.id.main_menu_documents_ui) { + Intent documentsUiIntent = new Intent(Intent.ACTION_VIEW); + documentsUiIntent.setDataAndType(null, "vnd.android.document/root"); + startActivity(documentsUiIntent); + return true; + } else { + return super.onOptionsItemSelected(item); } - return super.onOptionsItemSelected(item); } private void onApkSelected(Uri uri) { From ffba2c0d202790e82d9a0c4328c11e655ad2b55b Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 2 Apr 2021 10:11:16 +0800 Subject: [PATCH 128/355] ShelterService: stop being foreground when unbound --- .../net/typeblog/shelter/services/ShelterService.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/src/main/java/net/typeblog/shelter/services/ShelterService.java b/app/src/main/java/net/typeblog/shelter/services/ShelterService.java index 1957f57..d9fa83b 100644 --- a/app/src/main/java/net/typeblog/shelter/services/ShelterService.java +++ b/app/src/main/java/net/typeblog/shelter/services/ShelterService.java @@ -291,6 +291,16 @@ public class ShelterService extends Service { return mBinder; } + @Override + public boolean onUnbind(Intent intent) { + // Stop our foreground notification (if it was created at all) when + // all clients have disconnected. + // This helps to ensure no notification is left when the Shelter activity + // is closed. + stopForeground(true); + return false; + } + private boolean isHidden(String packageName) { return mIsProfileOwner && mPolicyManager.isApplicationHidden(mAdminComponent, packageName); } From dd3b4d4689243d3690e9b4e3b115bb42c0c48e50 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 2 Apr 2021 10:23:51 +0800 Subject: [PATCH 129/355] add fastlane-compatible metadata directory for F-Droid --- metadata/en-US/full_description.txt | 11 +++++++++++ metadata/en-US/images/icon.png | Bin 0 -> 39552 bytes metadata/en-US/short_description.txt | 1 + metadata/en-US/title.txt | 1 + 4 files changed, 13 insertions(+) create mode 100644 metadata/en-US/full_description.txt create mode 100644 metadata/en-US/images/icon.png create mode 100644 metadata/en-US/short_description.txt create mode 100644 metadata/en-US/title.txt diff --git a/metadata/en-US/full_description.txt b/metadata/en-US/full_description.txt new file mode 100644 index 0000000..89b2630 --- /dev/null +++ b/metadata/en-US/full_description.txt @@ -0,0 +1,11 @@ +Shelter is a Free and Open-Source (FOSS) app that leverages the "Work Profile" feature of Android to provide an isolated space that you can install or clone apps into. + +For a full description, please read from the Git repository of Shelter. A summary is provided below. + +The main use-cases of Shelter include: + +- Installing apps inside a work profile for isolation +- "Freeze" apps inside the work profile to prevent them from running or being woken up when you are not actively using them +- Installing two copies of the same app on the same device + +Note that Shelter depends on the Work Profile feature of the Android system, so any bugs related to Work Profiles in the Android-derived system you are using will affect Shelter. In addition, Shelter can only be as secure as the Work Profile implementation. diff --git a/metadata/en-US/images/icon.png b/metadata/en-US/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4e5c208e73e7a2802b2050d7a99dd9baf1477e85 GIT binary patch literal 39552 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 YggBc2T>JJAYcb$)aX4!K+?GuLKdOnibpQYW literal 0 HcmV?d00001 diff --git a/metadata/en-US/short_description.txt b/metadata/en-US/short_description.txt new file mode 100644 index 0000000..2c1e709 --- /dev/null +++ b/metadata/en-US/short_description.txt @@ -0,0 +1 @@ +Isolate and run multiple instances of apps using Work Profiles diff --git a/metadata/en-US/title.txt b/metadata/en-US/title.txt new file mode 100644 index 0000000..89158d6 --- /dev/null +++ b/metadata/en-US/title.txt @@ -0,0 +1 @@ +Shelter From a418ee9116ee0dcccacafe6a5241ddfaead80776 Mon Sep 17 00:00:00 2001 From: - Date: Mon, 19 Apr 2021 10:24:52 +0000 Subject: [PATCH 130/355] Translated using Weblate (German) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/de/ --- app/src/main/res/values-de/strings.xml | 36 ++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 23f4484..d693cca 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -88,4 +88,40 @@ Datei-Manager-Oberfläche Blockiere Suche nach Kontakten Zugriff vom persönlichen Profil zu den Kontakten im Arbeitsprofil blockieren. + Bereit\? + Bitte warten… + Wir versuchen, das Arbeitsprofil zu initialisieren und Shelter auf deinem Gerät einzurichten. + Einrichtung fehlgeschlagen + Handeln erforderlich + Du solltest nun eine Benachrichtigung von Shelter sehen. Bitte tippe auf diese Benachrichtigung, um den Einrichtungsprozess abzuschließen. +\n +\nWenn du die Benachrichtigung nicht siehst stelle sicher, dass dein Gerät nicht im \"Nicht stören\"-Modus ist und versuche, das Benachrichtigungspanel herunterzuziehen. +\n +\nUm Shelter zurückzusetzen und von vorne zu beginnen kannst du die Daten von Shelter in den Einstellungen löschen. + Shelter wurde auf AOSP-ähnlichen Android-Derivaten entwickelt und getestet. Diese schließen AOSP (Android Open Sourcr Project), Google Android (auf Pixels) sowie die meisten auf AOSP basierenden open-source-Custom-ROMs wie beispielsweise LineageOS ein. Wenn auf deinem Telefon eines der oben genannten Android-Derivate läuft, dann Glückwunsch! Shelter wird wahrscheinlich korrekt auf deinem Gerät funktionieren. +\n +\nEinige Geräteanbieter fügen dem Android-Basiscode sehr tiefgehende Anpassungen hinzu, welche in Konflikten, Inkompatibilität und unerwartetem Verhalten enden können. Einige Custom-ROMs fügen ebenfalls kompatibilitätshindernde Änderungen hinzu, wobei diese seltener vorzufinden sind als anbieterverursachte Inkompatibilitäten. +\n +\nShelter ist lediglich eine Schnittstelle zur Arbeitsprofil-Funktion die das System bereitstellt. Wenn diese Systemfunktion kaputt oder nicht standardisiert ist, kann Shelter dieses Problem nicht auf magische Weise selbstständig beheben. Wenn du momentan eine durch den Anbieter modifizierte Androidversion nutzt, die für das Kaputtmachen der Arbeitsprofilfunktion bekannt ist: Du wurdest gewarnt. Du kannst trotzdem fortfahren, aber es gibt keine Garantie, dass Shelter unter diesen Umständen korrekt funktioniert. + Wir sind nun bereit, Shelter für dich einzurichten. Bitte stelle zuerst sicher, dass sich dein Gerät nicht im \"Nicht stören\"-Modus befindet, da du später eine Benachrichtigung antippen musst, um den Einrichtungsprozess abzuschließen. +\n +\nWenn du bereit bist, tippe auf \"Weiter\", um den Einrichtungsprozess zu starten. + Es tut uns leid dir mitzuteilen, dass es uns nicht gelungen ist, Shelter für dich einzurichten. +\n +\nWenn du die Einrichtung nicht selbstständig abgebrochen hast ist der Grund für das Fehlschlagen höchstwahrscheinlich ein stark modifiziertes System oder ein Konflikt zwischen Shelter und anderen Arbeitsprofilverwaltern. Leider gibt es nicht viel, das wir diesbezüglich unternehmen können. +\n +\nTippe auf Weiter zum Beenden. + Willkommen bei Shelter + Shelter ist eine Anwendung, die dir dabei hilft, andere Anwendungen in einem isolierten Profil auszuführen. Dies geschieht durch Nutzung der Arbeitsprofil-Funktionalität von Android. +\n +\nTippe auf \"Weiter\" und wir teilen dir mehr Informationen über Shelter mit und führen dich durch den Einrichtungsprozess. +\n +\nWir empfehlen, dass du dir alle der folgenden Seiten aufmerksam durchliest. + Standardmäßig wird Shelter nicht nach irgendwelchen individuellen Berechtigungen fragen. Allerdings wird Shelter, nachdem du den Einrichtungsprozess beginnst, versuchen ein Arbeitsprofil einzurichten und wird infolgedessen Profilverwalter dieses Profils. +\n +\nDies gibt Shelter eine umfangreiche Liste an Berechtigungen innerhalb des Profils, vergleichbar mit denen eines Geräteadministrators, allerdings beschränkt auf das Profil. Profilverwalter zu sein ist für die meisten Funktionen von Shelter zwingend nötig. +\n +\nEinige erweiterte Funktionen von Shelter benötigen eventuell mehr Berechtigungen außerhalb des Arbeitsprofils. Shelter wird beim Aktivieren der entsprechenden Funktionen separat nach diesen Berechtigungen fragen, sofern nötig. + Kompatibilität + Ein Wort zu den Berechtigungen \ No newline at end of file From d9a3a0a66770b1c1ea2ca7fde7afe04f328badaf Mon Sep 17 00:00:00 2001 From: - Date: Tue, 20 Apr 2021 10:55:14 +0000 Subject: [PATCH 131/355] Translated using Weblate (Dutch) Currently translated at 55.1% (54 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/nl/ --- app/src/main/res/values-nl/strings.xml | 55 +++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 1c367a9..ef540fa 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -12,10 +12,10 @@ Shelter is nu actief … Bevries automatisch Widgets toestaan in Hoofdprofiel - Zoek + Zoeken Reeks Bevriezen Creëer Reeks Bevriezing Snelkoppeling - Bevries + Bevriezen Installeer APK in Shelter Toon Alle Apps Installatie applicatie voltooid in werkprofiel. @@ -28,4 +28,55 @@ \nAls je en ontwikkerlaar bent en graag Shelter wilt laten werken op deze onverenigbare ROMs zoals MIUI, pull requests zijn altijd welkom. De ontwikkelaar neemt ABSOLUUT GEEN VERANTWOORDELIJKHEID op als je je apperaat met een onverenigbare ROM breekt. \n \nJe zal een melding moeten krijgen om je instelling af te ronden, zorg er alsjeblieft voor dat je apperaat NIET op Niet Storen staat. + Shelter is ontwikkeld en getest op AOSP-achtige Android afgeleiden. Dit omvat AOSP (Android Open Source Project), Google Android (op Pixels), en de meeste op AOSP gebaseerde open-source custom ROMs zoals LineageOS. Als je telefoon draait op een van de Android afgeleiden hierboven vermeld, dan gefeliciteerd! Shelter zal waarschijnlijk correct werken op je telefoon. +\n +\nSommige leveranciers van toestellen voegen zeer ingrijpende aanpassingen aan de Android code base toe, wat resulteert in conflicten, incompatibiliteit en onverwacht gedrag. Sommige aangepaste ROM\'s kunnen ook compatibiliteits-brekende veranderingen toevoegen, maar over het algemeen zijn dit zeldzamere voorvallen in vergelijking met door de telefoonleverancier toegevoegde incompatibiliteiten. +\n +\nShelter is slechts een interface naar de functie Werkprofiel die door het systeem wordt geleverd. Als de functie die door het systeem wordt geleverd kapot of niet standaard is, kan Shelter het probleem niet op magische wijze zelf oplossen. Als je momenteel een door de leverancier aangepaste Android-versie gebruikt waarvan bekend is dat deze werkprofielen verbreekt, dan ben je gewaarschuwd. Je kunt toch doorgaan, maar er is geen garantie dat Shelter zich onder deze omstandigheden correct zou gedragen. + Shelter zal automatisch apps invriezen die zijn gestart vanuit \"Ontdooien & Start\" bij de volgende schermvergrendelingsgebeurtenis. + Snelkoppeling voor ontdooien en/of starten maken + Ontdooien en starten + Welkom bij Shelter + Shelter is een applicatie om je te helpen andere applicaties te draaien in een geïsoleerd profiel. Het doet dit door gebruik te maken van de Werkprofiel functie van Android. +\n +\nKlik op \"Volgende\", en we zullen je meer informatie geven over Shelter en je door het installatieproces leiden. +\n +\nWe raden u aan alle volgende pagina\'s zorgvuldig door te lezen. + Een woord over rechten + Shelter zal standaard niet om individuele rechten vragen. Echter, zodra je verder gaat met het installatieproces, zal Shelter proberen een Werkprofiel op te zetten en daarmee de profielmanager van dat profiel worden. +\n +\nDit geeft Shelter een uitgebreide lijst van rechten binnen het profiel, vergelijkbaar met die van een apparaatbeheerder, maar gewoon beperkt tot het profiel. Profielbeheerder zijn is noodzakelijk voor de meeste functies van Shelter. +\n +\nSommige geavanceerde functies van Shelter kunnen meer rechten buiten het werkprofiel vereisen. Indien nodig, zal Shelter apart om die rechten vragen wanneer u de betreffende functies inschakelt. + Compatibiliteit + Klaar\? + We zijn nu klaar om Shelter voor je in te stellen. Zorg er eerst voor dat jouw toestel niet in Niet Storen modus staat, omdat je later op een melding moet klikken om het installatieproces af te ronden. +\n +\nAls je klaar bent, klik op \"Volgende\" om het installatieproces te beginnen. + Wacht alstublieft… + We proberen het Werkprofiel te initialiseren en Shelter op jouw toestel in te stellen. + Setup mislukt + Tot onze spijt moeten wij u meedelen dat wij niet in staat waren Shelter voor je in te stellen. +\n +\nAls je de setup niet handmatig heeft geannuleerd, dan is de reden voor het mislukken meestal te wijten aan een sterk gewijzigd systeem of een conflict tussen Shelter en andere werkprofiel-managers. Helaas is hier niet veel aan te doen. +\n +\nKlik op Volgende om af te sluiten. + Actie vereist + Je zou nu een melding van Shelter moeten zien. Klik op die melding om het installatieproces te voltooien. +\n +\nAls je de melding niet ziet, controleer dan of je toestel niet in de Niet storen modus staat en probeer het meldingencentrum naar beneden te trekken. +\n +\nOm Shelter te resetten en opnieuw te beginnen, kun je de gegevens van Shelter wissen in Instellingen. + Nu bevriezen + Installeren... + Hoofd + Shelter + [Bevroren] %s + Batchbewerking + Kloon naar Shelter (Werkprofiel) + Kloon naar Hoofdprofiel + Verwijderen + Bevriezen + Ontdooien + Starten \ No newline at end of file From 029092dd9336d92f024d601f6fca6b590309b472 Mon Sep 17 00:00:00 2001 From: Skajmer Date: Fri, 23 Apr 2021 18:34:45 +0000 Subject: [PATCH 132/355] Translated using Weblate (Polish) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/pl/ --- app/src/main/res/values-pl/strings.xml | 36 ++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index fef7b4a..2b1c30e 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -88,4 +88,40 @@ NIE zamrażaj aplikacji na wierzchu (z widoczną aktywnością) gdy zablokujesz ekran. To może być przydatne dla np. odtwarzaczy muzyki, ale musisz je zamrozić ręcznie poprzez \"skrót do masowego zamrażania\". Shelter aby to zrobić wymaga uprawnienia dostępu do danych o użyciu. Proszę nadać uprawnienie OBU Z DWÓCH aplikacji Shelter na liście pokazanej po naciśnięciu \"Ok\". Nie nadanie uprawnienia spowoduje, że funkcja nie będzie działać prawidłowo. Shelter wymaga uprawnienia do Wyświetlania nad innymi aplikacji, aby mostek plików działał poprawnie. Proszę nadać uprawnienie OBU Z DWÓCH (Główna / Służbowa) aplikacjom Shelter na liście pokazanej po naciśnięciu \"Ok\". To uprawnienie jest używane aby uruchamiać usługę mostka plików w tle. + Witaj w Shelter + Shelter to aplikacja, która pozwala uruchamiać inne aplikacje w wyizolowanym profilu. Jest to możliwe dzięki funkcji Androida profil roboczy. +\n +\nNaciśnij \"Dalej\", by otrzymać więcej informacji o Shelterze oraz by otrzymać wsparcie w konfigurowaniu aplikacji. +\n +\nZalecamy przeczytać wszystko uważnie. + Uprawnienia + Domyślnie Shelter nie prosi o żadne uprawnienia. Jednak gdy skończysz konfigurację Shelter spróbuje stworzyć profil roboczy i stać się menadżerem tego profilu. +\n +\nTo przyzna Shelterowi obszerną listę uprawnień dotyczących profilu, porównywalnych do administratora urządzenia, jednak skupionych tylko na tym profilu. Bycie menadżerem profilu jest wymagane przez większość funkcji Sheltera. +\n +\nNiektóre zaawansowane funkcje Sheltera mogą wymagać więcej uprawnień poza profilem roboczym. Gdy zajdzie taka potrzeba, Shelter poprosi o uprawnienia konieczne do działania wybranej funkcji. + Kompatybilność + Shelter jest tworzony i testowany na pochodnych AOSP. Zaliczają się do nich: AOSP (Android Open Source Project), Google Android (na Pixelach oraz <b>większość opartych na AOSP otwartoźródłowych systemów,</b> takich jak LineageOS. Jeśli na swoim telefonie masz jedną z wersji Androida wymienionych powyżej — gratulacje! Shelter prawdopodobnie zadziała poprawnie na twoim urządzeniu. +\n +\nNiektórzy producenci urządzeń przeprowadzają bardzo inwazyjne zmiany w bazowym kodzie Androida, doprowadzając do konfliktów, niezgodności i nieprzewidywalnych zachowań. Niektóre systemy niezwiązane z producentami również mogą wprowadzać zmiany psujące kompatybilność, ale generalnie zdarza się to rzadziej niż problemy z modyfikacjami producentów. +\n +\nShelter jest zaledwie interfejsem dla profilu roboczego zapewnionego przez system. Jeśli funkcja dostarczona przez system jest popsuta lub niestandardowa, <b>Shelter tego magicznie nie naprawi./b> Jeśli używasz zmodyfikowanej przez producenta wersji Androida, która znana jest z psucia profili roboczych, <b>otrzymałeś/aś ostrzeżenie.</b> Oczywiście, możesz kontynuować, ale nie ma żadnej gwarancji, że Shelter będzie funkcjonować poprawnie w takich warunkach. + Przykro nam, ale nie udało nam się skonfigurować Sheltera dla ciebie. +\n +\nJeśli nie anulowałeś konfiguracji ręcznie, powodem niepowodzenia jest najczęściej mocno zmodyfikowany system lub konflikt pomiędzy Shelterem a innymi menadżerami profilu roboczego. Niestety nie możemy z tym nic zrobić. +\n +\nNaciśnij Dalej by wyjść. + Jesteśmy gotowi by skonfigurować Sheltera dla ciebie. Najpierw upewnij się, że urządzenie nie jest w trybie Nie Przeszkadzać, ponieważ konieczne będzie kliknięcie na powiadomienie w celu zakończenia konfiguracji. +\n +\nGdy będziesz gotowy/a, naciśnij \"Dalej\" by rozpocząć proces konfiguracji. + Proszę czekać… + Próbujemy przygotować profil roboczy i skonfigurować Shelter na twoim urządzeniu. + Konfiguracja nieudana + Wymagane działanie + Powinieneś teraz widzieć powiadomienie od Sheltera. Naciśnij na to powiadomienie by zakończyć proces konfiguracji. +\n +\nJeśli nie widzisz powiadomienia upewnij się, że nie masz włączonego trybu Nie Przeszkadzać lub spróbuj rozwinąć centrum powiadomień. +\n +\nBy zresetować Sheltera i zacząć od nowa możesz wyczyścić dane Sheltera w Ustawieniach. + Gotowy/a\? \ No newline at end of file From 0d9e73d9c259ff0ea623e7dde0d14c7e736fde36 Mon Sep 17 00:00:00 2001 From: Alparslan Sakci Date: Sat, 8 May 2021 18:57:21 +0000 Subject: [PATCH 133/355] Added translation using Weblate (Turkish) --- app/src/main/res/values-tr/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/src/main/res/values-tr/strings.xml diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml new file mode 100644 index 0000000..a6b3dae --- /dev/null +++ b/app/src/main/res/values-tr/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From 980e4f66c4bf9ce82c517069748ad1f152c11fac Mon Sep 17 00:00:00 2001 From: Alparslan Sakci Date: Sat, 8 May 2021 19:00:54 +0000 Subject: [PATCH 134/355] Translated using Weblate (Turkish) Currently translated at 17.3% (17 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/tr/ --- app/src/main/res/values-tr/strings.xml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index a6b3dae..74b5fcf 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -1,2 +1,13 @@ - \ No newline at end of file + + Uyumluluk + İzinler hakkında + Eylem gerekli + Hazır mısınız\? + Ayarlar + Sürüm + Hakkında + Lütfen bekleyin… + Kaynak Kodu + Hizmetler + \ No newline at end of file From 436a0deb09955b4148600e98cf4e5f2c96e52fad Mon Sep 17 00:00:00 2001 From: Alparslan Sakci Date: Sun, 9 May 2021 17:40:58 +0000 Subject: [PATCH 135/355] Translated using Weblate (Turkish) Currently translated at 24.4% (24 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/tr/ --- app/src/main/res/values-tr/strings.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 74b5fcf..524d8e4 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -10,4 +10,11 @@ Lütfen bekleyin… Kaynak Kodu Hizmetler + Shelter\'a hoş geldiniz + Ara + Dondur + Çeviri + \"%s\" uygulaması başarıyla klonlandı + \"%s\" uygulaması başarıyla kaldırıldı + Devam et \ No newline at end of file From faf534d9ec3c5f700b8172f7137b9b3a147657cb Mon Sep 17 00:00:00 2001 From: Quang Trung Date: Tue, 11 May 2021 02:31:45 +0000 Subject: [PATCH 136/355] Added translation using Weblate (Vietnamese) --- app/src/main/res/values-vi/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/src/main/res/values-vi/strings.xml diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml new file mode 100644 index 0000000..a6b3dae --- /dev/null +++ b/app/src/main/res/values-vi/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From 662207d920aab8832970ed356699b4d6cde15fd5 Mon Sep 17 00:00:00 2001 From: Quang Trung Date: Tue, 11 May 2021 03:39:05 +0000 Subject: [PATCH 137/355] Translated using Weblate (Vietnamese) Currently translated at 61.2% (60 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/vi/ --- app/src/main/res/values-vi/strings.xml | 78 +++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index a6b3dae..7f5250e 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -1,2 +1,78 @@ - \ No newline at end of file + + Chúng tôi rất tiếc phải thông báo cho bạn rằng chúng tôi đã không thể thiết lập Shelter cho bạn. +\n +\nNếu bạn đã không huỷ thiết lập theo cách thủ công, thì lý do của sự thất bại thường là một hệ thống bị sửa đổi sâu, hoặc có xung đột giữa Shelter và các trình quản lý Hồ sơ công việc khác. Không may mắn là chúng tôi không thể làm gì nhiều về điều này. +\n +\nNhấn Tiếp để thoát. + Bây giờ, bạn rất có thể đang thấy một thông báo từ Shelter. Vui lòng nhấn vào thông báo đó để hoàn thành quá trình thiết lập. +\n +\nNếu bạn không thấy thông báo đó, hãy chắc chắn là thiết bị của bạn đang không ở chế độ Không làm phiền và thử kéo trung tâm thông báo xuống. +\n +\nĐể đặt lại Shelter và bắt đầu lại, bạn có thể xoá dữ liệu của Shelter trong Cài đặt. + Chúc mừng! Bạn còn một cú nhấn nữa để hoàn tất thiết lập Shelter. + Shelter sẽ tự động đóng băng các ứng dụng được chạy từ \"Huỷ đóng băng & Chạy\" vào sự kiện khoá màn hình tiếp theo. + Huỷ đóng băng + Cho phép tiện ích trong Hồ sơ chính + Đã hoàn thành cài đặt ứng dụng trong hồ sơ công việc. + Việc điều khiển các ứng dụng bị ẩn khỏi danh sách có thể sẽ gây ra dừng đột ngột và nhiều hành vi không mong đợi. Tuy nhiên, tính năng này có thể hữu ích khi các bản ROM có lỗi do hãng tuỳ biến không bật tất cả các ứng dụng hệ thống cần thiết trong hồ sơ công việc theo mặc định. Nếu bạn tiếp tục, bạn tự chịu trách nhiệm. + Tiếp tục + Dịch vụ cô lập ứng dụng + Shelter cần trở thành Quản trị viên thiết bị để thực hiện các công việc cô lập của nó. + Chọn tệp hình ảnh + Một lời về các quyền + Sự tương thích + Sẵn sàng chưa\? + Vui lòng đợi… + Thiết lập thất bại + Yêu cầu hành động + Shelter - Quan trọng + Nhấn vào đây để hoàn tất thiết lập Shelter + Dịch vụ Shelter + Shelter hiện đang chạy… + Đang chờ tự động đóng băng + Đóng băng ngay + Đang cài đặt… + Chính + Shelter + [Đã đóng băng] %s + Hoạt động hàng loạt + Nhân bản vào Shelter (Hồ sơ công việc) + Nhân bản vào Hồ sơ chính + Gỡ cài đặt + Đóng băng + Chạy + Tạo lối tắt Huỷ đóng băng và/hoặc Chạy + Huỷ đóng băng và Chạy + Tự động đóng băng + Tìm kiếm + Đóng băng hàng loạt + Tạo lối tắt Đóng băng hàng loạt + Đóng băng + Cài đặt APK vào Shelter + Hiện tất cả ứng dụng + Mở giao diện Tài liệu + Cài đặt + Tương tác + Tạm biệt + Chào mừng đến Shelter + Shelter là một ứng dụng giúp bạn chạy các ứng dụng khác trong một hồ sơ được cô lập. Nó làm vậy bằng cách sử dụng tính năng Hồ sơ công việc của Android. +\n +\nNhấn \"Tiếp\", và chúng tôi sẽ cung cấp cho bạn thêm thông tin về Shelter, và hướng dẫn bạn qua quá trình thiết lập. +\n +\nChúng tôi khuyên bạn đọc tất cả những trang sau đây một cách cẩn thận. + Theo mặc định, Shelter sẽ không hỏi bất kỳ quyền riêng biệt nào. Tuy nhiên, khi bạn tiếp tục quá trình thiết lập, Shelter sẽ cố thiết lập một Hồ sơ công việc và do đó trở thành người quản lý hồ sơ của hồ sơ đó. +\n +\nViệc này sẽ cấp cho Shelter một danh sách dài các quyền ở trong hồ sơ, có thể so sánh với một Quản trị viên thiết bị, mặc dù bị giới hạn trong hồ sơ đó. Việc làm người quản lý hồ sơ là cần thiết cho đa số chức năng của Shelter. +\n +\nMột số tính năng nâng cao của Shelter có thể sẽ yêu cầu nhiều quyền hơn ở ngoài Hồ sơ công việc. Khi cần, Shelter sẽ hỏi các quyền đó một cách riêng biệt khi bạn bật các tính năng tương ứng. + Shelter được phát triển và thử nghiệm trên các biến thể Android giống AOSP. Những biến thể này bao gồm AOSP (Android Open Source Project), Google Android (trên các thiết bị Pixel), và đa số các bản ROM tuỳ chỉnh mã nguồn mở dựa trên AOSP như là LineageOS. Nếu điện thoại của bạn đang chạy một trong số những biến thể Android được liệt kê ở trên, thì chúc mừng! Shelter có thể sẽ hoạt động đúng trên thiết bị của bạn. +\n +\nMột số hãng thiết bị giới thiệu những tuỳ biến rất gây xâm hại vào mã nguồn của Android, việc này dẫn đến sự xung đột, không tương thích và hành vi không mong đợi. Một số bản ROM tuỳ chỉnh cũng có thể giới thiệu các thay đổi phá vỡ sự tương thích, nhưng nói chung thì chúng xảy ra hiếm hơn so với những sự không tương thích do hãng điện thoại gây ra. +\n +\nShelter chỉ là một giao diện vào tính năng Hồ sơ công việc được hệ thống cung cấp. Nếu tính năng được hệ thống cung cấp bị hỏng hoặc phi tiêu chuẩn, Shelter không thể tự giải quyết vấn đề một cách nhiệm màu. Nếu bạn hiện đang sử dụng một phiên bản Android được hãng sửa đổi được biết là làm hỏng Hồ sơ công việc, bạn đã được cảnh báo. Bạn có thể vẫn tiếp tục, nhưng không có đảm bảo rằng Shelter sẽ hoạt động đúng dưới hoàn cảnh này. + Chúng tôi bây giờ đã sẵn sàng thiết lập Shelter cho bạn. Trước hết, vui lòng chắc chắn rằng thiết bị của bạn đang không ở trong chế độ Không làm phiền, vì bạn sẽ cần phải nhấn vào một thông báo vào lúc sau để hoàn thành quá trình thiết lập. +\n +\nKhi bạn đã sẵn sàng, hãy nhấn vào \"Tiếp\" để bắt đầu quá trình thiết lập. + Chúng tôi đang cố khởi tạo Hồ sơ công việc và thiết lập Shelter trên thiết bị của bạn. + \ No newline at end of file From 4735f35439edf49c52e9f372d0cdd708b336438b Mon Sep 17 00:00:00 2001 From: Quang Trung Date: Tue, 11 May 2021 05:28:47 +0000 Subject: [PATCH 138/355] Translated using Weblate (Vietnamese) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/vi/ --- app/src/main/res/values-vi/strings.xml | 38 ++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 7f5250e..9fb0ae1 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -75,4 +75,42 @@ \n \nKhi bạn đã sẵn sàng, hãy nhấn vào \"Tiếp\" để bắt đầu quá trình thiết lập. Chúng tôi đang cố khởi tạo Hồ sơ công việc và thiết lập Shelter trên thiết bị của bạn. + Trưng bày một ứng dụng máy ảnh giả cho các ứng dụng khác, việc này cho phép bạn chọn một hình ảnh bất kỳ từ Giao diện Tài liệu (và Chia sẻ tệp nếu được bật) làm bức ảnh được chụp. Việc này sẽ bật Chia sẻ tệp cho bất kỳ ứng dụng nào hỗ trợ việc gọi các ứng dụng máy ảnh khác để chụp ảnh, kể cả nếu chúng không trực tiếp hỗ trợ Giao diện Tài liệu. + Độ trễ tự động đóng băng + Bỏ qua các ứng dụng ở trước + KHÔNG đóng băng các ứng dụng ở trước (có hoạt động có thể nhìn thấy được) khi bạn khoá màn hình. Việc này có thể hữu ích đối với các ứng dụng như trình phát nhạc, nhưng sau đó bạn sẽ cần phải đóng băng chúng theo cách thủ công qua \"Lối tắt Đóng băng hàng loạt\". + Phiên dịch + Báo cáo lỗi / Trình theo dõi vấn đề + Thiết lập Shelter hoàn tất. Bây giờ đang khởi động lại Shelter. Nếu Shelter không tự động khởi động, bạn có thể chạy nó lại từ launcher của bạn. + Không tìm thấy hồ sơ công việc. Vui lòng khởi động lại ứng dụng để quản lý lại hồ sơ. + Có vẻ như bạn đã tắt Chế độ công việc trong khi đang khởi động Shelter. Nếu bạn đã bật nó ngay bây giờ, vui lòng khởi động lại Shelter. + Đã đóng băng ứng dụng \"%s\" thành công + Không thể nhân bản ứng dụng hệ thống vào một hồ sơ mà Shelter không thể kiểm soát. + Không thể gỡ cài đặt ứng dụng hệ thống trong một hồ sơ mà Shelter không thể kiểm soát. + Tất cả ứng dụng trong danh sách \"Tự động đóng băng\" đã được đóng băng thành công. + Shelter cần quyền Thống kê sử dụng để làm việc này. Vui lòng bật quyền đó cho CẢ HAI ứng dụng Shelter được hiện trong hộp thoại sau khi bạn nhấn \"Ok\". Tính năng này sẽ không hoạt động đúng nếu bạn không làm vậy. + Chia sẻ tệp + Khi được bật, bạn sẽ có thể duyệt / xem / chọn / sao chép các tệp trong Shelter từ hồ sơ chính và ngược lại, CHỈ qua Giao diện Tài liệu (có tên là Tệp hoặc Tài liệu trên launcher của bạn) hoặc các ứng dụng có hỗ trợ Giao diện Tài liệu (chúng chỉ có quyền truy cập tạm thời vào các tệp bạn chọn trong Giao diện Tài liệu), trong khi vẫn giữ sự cô lập hệ thống tệp. + Trình chọn hình ảnh dưới dạng máy ảnh giả + Chặn tìm kiếm danh bạ + Từ chối quyền truy cập danh bạ từ hồ sơ chính trong hồ sơ công việc. + Dịch vụ + Dịch vụ tự động đóng băng + Khi màn hình bị khoá, tự động đóng băng các ứng dụng được chạy từ \"Lối tắt Huỷ đóng băng & Chạy\". + Giới thiệu + Phiên bản + Mã nguồn + Quyền bị từ chối hoặc thiết bị không được hỗ trợ + Không thể quản lý hồ sơ công việc. Bạn có thể thử lại bằng cách khởi động lại Shelter. + Đã nhân bản ứng dụng \"%s\" thành công + Đã gỡ cài đặt ứng dụng \"%s\" thành công + Đã huỷ đóng băng ứng dụng \"%s\" thành công + Không thể thêm lối tắt vào launcher. Vui lòng liên hệ với nhà phát triển để biết thêm thông tin. + Hoạt động cho %s + Đã tạo lối tắt trên launcher. + Không thể chạy ứng dụng %s vì nó không có giao diện đồ hoạ. + Shelter cần quyền truy cập Tất cả tệp cho Chia sẻ tệp. Vui lòng bật quyền đó cho CẢ HAI ứng dụng Shelter (Cá nhân / Công việc) được hiện trong hộp thoại sau khi bạn nhấn \"Ok\". + Shelter cần Hiện trên các ứng dụng khác để Chia sẻ tệp hoạt động đúng. Vui lòng bật quyền đó cho CẢ HAI ứng dụng Shelter (Cá nhân / Công việc) được hiện trong hộp thoại sau khi bạn nhấn \"Ok\". Quyền này được sử dụng để khởi động các dịch vụ Chia sẻ tệp trong nền. + Việc nhân bản các ứng dụng không phải hệ thống vào một hồ sơ khác hiện chưa làm được trên MIUI. Vui lòng nhân bản cửa hàng ứng dụng của hệ thống (vd: CH Play) vào hồ sơ khác đó và sau đó là cài đặt các ứng dụng từ đó. + Vẫn tiếp tục \ No newline at end of file From 7cfdad04f4310b9b73ab21313b1c2f496d1ce705 Mon Sep 17 00:00:00 2001 From: Alparslan Sakci Date: Thu, 13 May 2021 12:05:14 +0000 Subject: [PATCH 139/355] Translated using Weblate (Turkish) Currently translated at 55.1% (54 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/tr/ --- app/src/main/res/values-tr/strings.xml | 30 ++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 524d8e4..5f18f89 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -17,4 +17,34 @@ \"%s\" uygulaması başarıyla klonlandı \"%s\" uygulaması başarıyla kaldırıldı Devam et + İptal + Görüntü Dosyası Seçin + Uygulama İzolasyon Hizmeti + İzolasyon hizmetinin çalışabilmesi için Shelter\'ı Cihaz Yöneticisi yap. + Kurulum başarısız + Shelter (Önemli) + Shelter Hizmeti + Shelter şu an çalışıyor… + Kaldır + Yükleniyor... + Dondur + Aktifleştir + Aktifleştirme ve/veya Çalıştırma Kısayolu Oluştur + Aktifleştir ve Çalıştır + Otomatik Dondur + Tüm Uygulamaları Göster + Çalıştır + [Dondurulmuş] %s + Gizlenmiş uygulamalar üstünde değişikler yaparsanız çökmeler ve beklenmeyen hatalar meydana gelebilir. Ancak bu özellik, üretici tarafından özelleştirilmiş hatalı ROM\'larda iş profili için gerekli tüm sistem uygulamaları etkinleştirilmediğinde işe yarayabilir. Devam ettiğiniz takdirde sorumluluk size aittir. + Ana Profil + İş Profili + Ana Profilde Widget\'lara İzin Ver + İş profiline klonla + Ana profile klonla + Otomatik Dondurma Hizmeti + Otomatik Dondurma Gecikme Süresi + Hata Bildir / Sorun Takibi + İzin reddedildi veya cihazınız desteklenmiyor + \"Otomatik Dondur\" listesindeki tüm uygulamalar başarıyla donduruldu. + %s uygulaması grafiksel arayüze sahip olmadığı için açılamadı. \ No newline at end of file From bc1cd3d7923b220948739226e564cb86805bd9b1 Mon Sep 17 00:00:00 2001 From: Alparslan Sakci Date: Sat, 15 May 2021 20:50:46 +0000 Subject: [PATCH 140/355] Translated using Weblate (Swedish) Currently translated at 9.1% (9 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/sv/ --- app/src/main/res/values-sv/strings.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index a6b3dae..d3c9c7a 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -1,2 +1,5 @@ - \ No newline at end of file + + Frys Nu + Installerar... + \ No newline at end of file From 8642521ee9f94cb30fd8d3b1f4914bda1f8db9a0 Mon Sep 17 00:00:00 2001 From: Alparslan Sakci Date: Sat, 15 May 2021 20:44:11 +0000 Subject: [PATCH 141/355] Translated using Weblate (Spanish) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/es/ --- app/src/main/res/values-es/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index bae863f..b89623f 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -3,7 +3,7 @@ Servicio Shelter Shelter se esta ejecutando actualmente… Suspensión automática pendiente - Adios + Adiós Continuar Servicio de aislamiento Shelter necesita convertirse en el administrador del dispositivo para realizar tareas de aislamiento. From 9c4d846907fd0c916983421f3a2f3f1f81bbec25 Mon Sep 17 00:00:00 2001 From: Alparslan Sakci Date: Sat, 15 May 2021 15:40:51 +0000 Subject: [PATCH 142/355] Translated using Weblate (Turkish) Currently translated at 75.5% (74 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/tr/ --- app/src/main/res/values-tr/strings.xml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 5f18f89..7734134 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -47,4 +47,28 @@ İzin reddedildi veya cihazınız desteklenmiyor \"Otomatik Dondur\" listesindeki tüm uygulamalar başarıyla donduruldu. %s uygulaması grafiksel arayüze sahip olmadığı için açılamadı. + APK dosyası yükleyin + Çoklu İşlem + Uygulama iş profiline yüklendi. + Shelter kurulumunu tamamlamak için buraya tıklayın + Etkileşim + Dosya Gezginini aç + Tebrikler! Shelter kurulumu bitmek üzere. + Şimdi Dondur + Çoklu Dondurma Kısayolu Oluştur + Çoklu Dondurma + Rehber Erişimini Engelle + Görüntü Seçiciyi kamera uygulaması gibi göster + \"%s\" uygulaması başarıyla donduruldu + \"%s\" uygulaması başarıyla aktifleştirildi + %s için İşlemler + Kısayol, ana ekrana eklendi. + Ana ekran uygulamanıza kısayol eklenemiyor. Detaylı bilgi için lütfen geliştirici ile iletişime geçin. + Devam et + Shelter, AOSP gibi Android türevleri için geliştirilmiştir. Bu türevlere AOSP (Android Open Source Project), Google Android (Pixel model cihazlarda) ve LineageOS gibi AOSP-tabanlı açık kaynak ROM\'ların çoğu dahildir. Eğer telefonunuzda bu Android türevlerinden biri yüklüyse Shelter büyük ihtimalle telefonunuzda sorunsuz bir şekilde çalışacaktır. +\n +\nBazı cihaz üreticilerinin Android\'in temel koduna koyduğu aşırı müdahaleci özelleştirmeler cihazda çakışmalara, uyumsuzluklara ve beklenmeyen hatalara yol açabilir. Bazı özel ROM\'lar da uyumluluğu bozan değişiklere sebep olabilir ancak bu durum telefon üreticilerinden kaynaklanan hatalara göre daha nadir görülür. +\n +\nShelter, sistem tarafından sağlanan İş Profili özelliği için kullanılabilen bir arayüzden ibarettir. Sistem tarafından sağlanan bu özellik hatalı veya standart dışı ise Shelter bu sorunlara kendi başına çözüm getiremez. İş Profili özelliğini bozduğu bilinen üretici sürümü bir Android kullanan kullanıclarımızın bu uyarıyı dikkate almalarını tavsiye ederiz. Shelter, bu koşullar altında düzgün çalışacağını garanti etmez. + Ana profilin iş profiline bağlı olan rehbere erişimini engelle. \ No newline at end of file From c71b79b8f2c1aea74ce79cd33503e3766ec0fd77 Mon Sep 17 00:00:00 2001 From: Alparslan Sakci Date: Mon, 17 May 2021 16:53:53 +0000 Subject: [PATCH 143/355] Translated using Weblate (Turkish) Currently translated at 85.7% (84 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/tr/ --- app/src/main/res/values-tr/strings.xml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 7734134..21b464c 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -71,4 +71,18 @@ \n \nShelter, sistem tarafından sağlanan İş Profili özelliği için kullanılabilen bir arayüzden ibarettir. Sistem tarafından sağlanan bu özellik hatalı veya standart dışı ise Shelter bu sorunlara kendi başına çözüm getiremez. İş Profili özelliğini bozduğu bilinen üretici sürümü bir Android kullanan kullanıclarımızın bu uyarıyı dikkate almalarını tavsiye ederiz. Shelter, bu koşullar altında düzgün çalışacağını garanti etmez. Ana profilin iş profiline bağlı olan rehbere erişimini engelle. + Bekleyen otomatik dondurma + Ekranınızı kilitlediğinizde \"Aktifleştir & Çalıştır\" seçeneği üzerinden başlatılan uygulamalar otomatik olarak dondurulacaktır. + Dosya Köprüsü + Ekranınızı kilitlediğinizde, \"Aktifleştir & Çalıştır\" kısayolu üzerinden başlatılan uygulamalar otomatik olarak dondurulacaktır. + İş profili atanamadı. Tekrar denemek için Shelter\'ı yeniden başlatın. + MIUI yüklü cihazlarda sistem dışı uygulamaların klonlanması henüz mümkün değildir. Lütfen sisteminizde yüklü olan uygulama mağazasını (örn. Google Play Store) iş profilinize klonlayın ve sistem dışı uygulamaları bu klon mağaza üzerinden yükleyin. + Shelter, yetkisi dışında kalan bir profile sistem uygulamalarını klonlayamaz. + Shelter, yetkisi dışında kalan bir profilde sistem uygulamalarını kaldıramaz. + İş profili bulunamadı. İş profilini tekrar atamak için lütfen Shelter\'ı yeniden başlatın. + Shelter, Android\'in İş Profili özelliğini kullanarak diğer uygulamaları izole bir profilde çalıştırmanızı sağlayan bir uygulamadır. +\n +\n\"İleri\" seçeneğine tıklarsanız sizi Shelter ve kurulum süreci hakkında detaylı bir şekilde bilgilendireceğiz. +\n +\nTüm bilgileri dikkatlice okumanızı tavsiye ederiz. \ No newline at end of file From e38982b96dc6ca3725ea171198ef2f9f230f4cea Mon Sep 17 00:00:00 2001 From: Alexandre Brochand Date: Wed, 19 May 2021 14:48:35 +0000 Subject: [PATCH 144/355] Translated using Weblate (French) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/fr/ --- app/src/main/res/values-fr/strings.xml | 36 ++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 7100d73..d40ef26 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -88,4 +88,40 @@ Le clonage d\'applications non système vers un autre profil n\'est actuellement pas possible sur MIUI. Veuillez cloner la boutique d\'applications de votre système (par exemple, <b>Play Store</b>) dans l\'autre profil, puis installer les applications à partir de là.Play Store) into the other profile and then install apps from there. Continuer quand même Navigation de Documents + Veuillez patienter… + Échec de l\'installation + Action requise + Vous devriez maintenant voir une notification de Shelter. Veuillez cliquer sur cette notification pour terminer le processus d\'installation. +\n +\nSi vous ne voyez pas la notification, assurez-vous que votre appareil n\'est pas en mode Ne pas déranger et essayez de tirer le centre de notifications vers le bas. +\n +\nPour réinitialiser Shelter et recommencer, vous pouvez vider l\'espace de stockage de Shelter dans les paramètres de votre téléphone. + Nous essayons d\'initialiser le profil professionnel et de configurer Shelter sur votre appareil. + Nous avons le regret de vous informer que nous n\'avons pas réussi à configurer Shelter. +\n +\nSi vous n\'avec pas annulé manuellement la configuration, alors l\'origine de cet échec est probablement liée à une version d\'Android trop lourdement modifiée, ou bien à un conflit entre Shelter et d\'autres gestionnaires de Profil professionnel. Malheureusement, nous ne pouvons pas y faire grand chose. +\n +\nAppuyez sur \"Suivant\" pour sortir. + Bienvenue dans Shelter + Un point sur les permissions + Compatibilité + Prêt(e) \? + Shelter est une application permettant d\'exécuter d\'autres application à l\'intérieur d\'un compartiment isolé. Pour cela, elle utilise la fonctionnalité <b>Profil Professionnel<b> d\'Android. +\n +\nAppuyez sur \"Suivant\", afin que nous puissions vous fournir de plus amples informations sur Shelter et vous guider dans le processus de configuration. +\n +\nNous vous suggérons de lire attentivement l\'intégralité des informations suivantes. + Par défaut, Shelter ne demandera pas de permissions spécifiques. Cependant, une fois que vous aurez terminé le processus de configuration, Shelter essaiera de créer un profil de travail et en deviendra donc le gestionnaire de profil. +\n +\nCela accordera à Shelter une liste étendue d\'autorisations à l\'intérieur du profil, comparable à celle d\'un Administrateur de l\'appareil, mais bien limitée au profil. Le statut de gestionnaire de profil est indispensable à la plupart des fonctionnalités de Shelter. +\n +\nCertaines fonctionnalités avancées de Shelter peuvent nécessiter davantage de permissions en dehors du profil de travail. Au besoin, Shelter demandera ces autorisations séparément lorsque vous activerez les fonctionnalités correspondantes. + Shelter est développé et testé sur des dérivés d\'Android de type AOSP. Cela inclut AOSP (Android Open Source Project), Google Android (sur la gamme Google Pixel), et <b>la plupart des ROM customisées open-source basées sur AOSP</b> comme LineageOS. Si votre téléphone exécute l\'un des dérivés d\'Android énumérés ci-dessus, alors félicitations ! Shelter va probablement fonctionner correctement sur votre appareil. +\n +\nCertains fabricants de téléphones introduisent des éléments personnalisés très envahissants dans la base de code Android, ce qui entraîne des conflits, une incompatibilité et un comportement inattendu. Certaines ROM customisées peuvent également introduire des modifications qui compromettent le bon fonctionnement de Shelter, mais celles-ci sont généralement plus rares que les incompatibilités liées aux fabricants. +\n +\nShelter est simplement une interface permettant de contrôler la fonctionnalité d\'Android \"Profil professionnel\". Si celle-ci est défaillante ou non-conforme, </b>Shelter sera incapable de résoudre le problème tout seul</b>. Si vous utilisez actuellement une version d\'Android modifiée par le fabricant qui est connue pour altérer le fonctionnement du Profil professionnel, </b>vous êtes prévenu(e)</b>. Vous pouvez quand même continuer, mais il n\'est pas garanti que Shelter fonctionne normalement dans ces circonstances. + Nous sommes maintenant prêts à configurer Shelter pour vous. Veuillez d\'abord vous assurer que votre appareil n\'est pas en mode Ne pas déranger, car vous devrez cliquer sur une notification plus tard pour finaliser le processus de configuration. +\n +\nLorsque vous serez prêt(e), cliquez sur \"Suivant\" pour commencer le processus de configuration. \ No newline at end of file From 1e1540ab80ab648a267b059abcac4762501bf9ee Mon Sep 17 00:00:00 2001 From: Alparslan Sakci Date: Wed, 19 May 2021 17:17:25 +0000 Subject: [PATCH 145/355] Translated using Weblate (Turkish) Currently translated at 86.7% (85 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/tr/ --- app/src/main/res/values-tr/strings.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 21b464c..f230868 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -85,4 +85,9 @@ \n\"İleri\" seçeneğine tıklarsanız sizi Shelter ve kurulum süreci hakkında detaylı bir şekilde bilgilendireceğiz. \n \nTüm bilgileri dikkatlice okumanızı tavsiye ederiz. + Üzgünüz, Shelter kurulumu başarısız. +\n +\nEğer kurulumu iptal etmediyseniz, kurulumun başarısız olmasının sebebi yüksek ihtimalle Shelter ile başka bir İş Profili yöneticisinin çakışması veya sisteminizin büyük ölçüde değiştirilmiş olmasıdır. Shelter maalesef bu tip sorunlara çözüm getiremez. +\n +\nÇıkmak için İleri seçeneğine tıklayın. \ No newline at end of file From b5d1ccdbbe242cbe3691d08f4a7f5de272680b89 Mon Sep 17 00:00:00 2001 From: Alparslan Sakci Date: Sun, 23 May 2021 17:54:48 +0000 Subject: [PATCH 146/355] Translated using Weblate (Turkish) Currently translated at 93.8% (92 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/tr/ --- app/src/main/res/values-tr/strings.xml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index f230868..d8b1f2b 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -90,4 +90,21 @@ \nEğer kurulumu iptal etmediyseniz, kurulumun başarısız olmasının sebebi yüksek ihtimalle Shelter ile başka bir İş Profili yöneticisinin çakışması veya sisteminizin büyük ölçüde değiştirilmiş olmasıdır. Shelter maalesef bu tip sorunlara çözüm getiremez. \n \nÇıkmak için İleri seçeneğine tıklayın. + Shelter, çalışmak için herhangi bir izne ihityaç duymaz ancak kurulum sürecini başlattığınızda Shelter bir İş Profili oluşturmayı deneyecek ve bu İş Profilinin profil yöneticisi olacaktır. +\n +\nProfil yöneticisi, bir Cihaz Yöneticisi kadar kapsamlı yetkilere sahiptir fakat bu yetkiler sadece yönetilen profil için geçerlidir. Bu yetkiler Shelter\'ın sorunsuz bir şekilde çalışması için gereklidir. +\n +\nShelter, bazı gelişmiş özellikler için iş profili dışında başka izinlere ihtiyaç duyabilir. Bu özellikleri kullandığınız zaman Shelter sizden bu izinleri isteyecektir. + Kurulum için hazırlık tamamlandı. Kurulumun son aşamasında bir bildirime tıklamanız gerekiyor. Devam etmeden önce lütfen cihazınızın Rahatsız Etmeyin modunda olmadığından emin olun. +\n +\nHazır olduğunuzda kurulum sürecini başlatmak için \"İleri\" seçeneğine tıklayın. + Shelter tarafından bir bildirim gelmiş olması lazım. Kurulumu tamamlamak için lütfen bu bildirime tıklayın. +\n +\nEğer bir bildirim gelmediyse, lütfen cihazınızın Rahatsız Etmeyin modunda olmadığından emin olun ve bildirim çekmecenize bakın. +\n +\nKurulum sürecine baştan başlamak isterseniz lütfen uygulama verilerini sıfırlayın ve uygulamayı yeniden başlatın. + İş Profili oluşturuluyor ve Shelter kurulumu yapılıyor. + Önplandaki Uygulamalar Dondurulmasın + Kurulum tamamlandı. Shelter yeniden başlatılıyor. Eğer yeniden başlatma otomatik olarak gerçekleşmezse, lütfen Shelter\'ı ana ekran uygulamanız üzerinden tekrar başlatın. + Ekranınızı kilitlediğinizde önplanda çalışan ve görünür etkinliğe sahip uygulamalar dondurulmaz. Bu özellik müzik çalar gibi uygulamaları daha rahat kullanmak için işinize yarayabilir ancak sonrasında bu uygulamaları \"Çoklu Dondurma Kısayolu\" üzerinden dondurmanız gerekir. \ No newline at end of file From 838b2b085f3205af0c1c31f3ab591b0ccc8672f9 Mon Sep 17 00:00:00 2001 From: Alparslan Sakci Date: Mon, 24 May 2021 15:01:29 +0000 Subject: [PATCH 147/355] Translated using Weblate (Turkish) Currently translated at 94.8% (93 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/tr/ --- app/src/main/res/values-tr/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index d8b1f2b..d51ddcf 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -107,4 +107,5 @@ Önplandaki Uygulamalar Dondurulmasın Kurulum tamamlandı. Shelter yeniden başlatılıyor. Eğer yeniden başlatma otomatik olarak gerçekleşmezse, lütfen Shelter\'ı ana ekran uygulamanız üzerinden tekrar başlatın. Ekranınızı kilitlediğinizde önplanda çalışan ve görünür etkinliğe sahip uygulamalar dondurulmaz. Bu özellik müzik çalar gibi uygulamaları daha rahat kullanmak için işinize yarayabilir ancak sonrasında bu uygulamaları \"Çoklu Dondurma Kısayolu\" üzerinden dondurmanız gerekir. + Uygulama başlatılırken İş Profilinin devre dışı bırakıldığı tespit edildi. İş Profilini etkinleştirdiyseniz, değişikliklerin uygulanması için lütfen Shelter\'ı yeniden başlatın. \ No newline at end of file From 66f582f7712a206a6d73cb1a3b09d29c045ffc8f Mon Sep 17 00:00:00 2001 From: Alparslan Sakci Date: Tue, 25 May 2021 16:22:01 +0000 Subject: [PATCH 148/355] Translated using Weblate (Turkish) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/tr/ --- app/src/main/res/values-tr/strings.xml | 31 +++++++++++++++----------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index d51ddcf..9fbb920 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -29,13 +29,13 @@ Yükleniyor... Dondur Aktifleştir - Aktifleştirme ve/veya Çalıştırma Kısayolu Oluştur + Aktifleştir ve/veya Çalıştır Kısayolu Oluştur Aktifleştir ve Çalıştır Otomatik Dondur Tüm Uygulamaları Göster Çalıştır [Dondurulmuş] %s - Gizlenmiş uygulamalar üstünde değişikler yaparsanız çökmeler ve beklenmeyen hatalar meydana gelebilir. Ancak bu özellik, üretici tarafından özelleştirilmiş hatalı ROM\'larda iş profili için gerekli tüm sistem uygulamaları etkinleştirilmediğinde işe yarayabilir. Devam ettiğiniz takdirde sorumluluk size aittir. + Gizlenmiş uygulamalar üstünde değişikler yaparsanız çökmeler ve beklenmeyen hatalar meydana gelebilir. Ancak bu özellik, üretici tarafından özelleştirilmiş hatalı ROM\'larda iş profili için gerekli tüm sistem uygulamaları etkinleştirilmediğinde işinize yarayabilir. Devam ettiğiniz takdirde sorumluluk size aittir. Ana Profil İş Profili Ana Profilde Widget\'lara İzin Ver @@ -47,7 +47,7 @@ İzin reddedildi veya cihazınız desteklenmiyor \"Otomatik Dondur\" listesindeki tüm uygulamalar başarıyla donduruldu. %s uygulaması grafiksel arayüze sahip olmadığı için açılamadı. - APK dosyası yükleyin + İş profiline APK dosyası kurun Çoklu İşlem Uygulama iş profiline yüklendi. Shelter kurulumunu tamamlamak için buraya tıklayın @@ -55,8 +55,8 @@ Dosya Gezginini aç Tebrikler! Shelter kurulumu bitmek üzere. Şimdi Dondur - Çoklu Dondurma Kısayolu Oluştur - Çoklu Dondurma + Çoklu Dondur Kısayolu Oluştur + Çoklu Dondur Rehber Erişimini Engelle Görüntü Seçiciyi kamera uygulaması gibi göster \"%s\" uygulaması başarıyla donduruldu @@ -65,11 +65,11 @@ Kısayol, ana ekrana eklendi. Ana ekran uygulamanıza kısayol eklenemiyor. Detaylı bilgi için lütfen geliştirici ile iletişime geçin. Devam et - Shelter, AOSP gibi Android türevleri için geliştirilmiştir. Bu türevlere AOSP (Android Open Source Project), Google Android (Pixel model cihazlarda) ve LineageOS gibi AOSP-tabanlı açık kaynak ROM\'ların çoğu dahildir. Eğer telefonunuzda bu Android türevlerinden biri yüklüyse Shelter büyük ihtimalle telefonunuzda sorunsuz bir şekilde çalışacaktır. + Shelter, AOSP gibi Android türevleri için geliştirilmiştir. Bu türevlere AOSP (Android Open Source Project), Google Android (Pixel model cihazlarda) ve LineageOS gibi AOSP-tabanlı açık kaynak ROM\'ların çoğu dahildir. Eğer telefonunuzda bu Android türevlerinden biri yüklüyse Shelter büyük ihtimalle sorunsuz bir şekilde çalışacaktır. \n -\nBazı cihaz üreticilerinin Android\'in temel koduna koyduğu aşırı müdahaleci özelleştirmeler cihazda çakışmalara, uyumsuzluklara ve beklenmeyen hatalara yol açabilir. Bazı özel ROM\'lar da uyumluluğu bozan değişiklere sebep olabilir ancak bu durum telefon üreticilerinden kaynaklanan hatalara göre daha nadir görülür. +\nBazı cihaz üreticilerinin Android\'in temel koduna koyduğu aşırı müdahaleci özelleştirmeler cihazda çakışmalara, uyumsuzluklara ve beklenmeyen hatalara yol açabilir. Bazı özel ROM\'lar da uyumluluğu bozan değişiklikler sunabilir ancak bu durum telefon üreticilerinden kaynaklanan hatalara göre daha nadir görülür. \n -\nShelter, sistem tarafından sağlanan İş Profili özelliği için kullanılabilen bir arayüzden ibarettir. Sistem tarafından sağlanan bu özellik hatalı veya standart dışı ise Shelter bu sorunlara kendi başına çözüm getiremez. İş Profili özelliğini bozduğu bilinen üretici sürümü bir Android kullanan kullanıclarımızın bu uyarıyı dikkate almalarını tavsiye ederiz. Shelter, bu koşullar altında düzgün çalışacağını garanti etmez. +\nShelter, sistemin sağladığı İş Profili özelliği için kullanılabilen bir arayüzden ibarettir. Sistem tarafından sağlanan bu özellik standart dışı ise veya hatalar barındırıyorsa, Shelter bu sorunlara kendi başına çözüm getiremez. İş Profili özelliğini bozduğu bilinen üretici sürümü bir Android kullanıyorsanız bu uyarıyı dikkate almalarını tavsiye ederiz. Shelter, bu koşullar altında düzgün çalışacağını garanti etmez. Ana profilin iş profiline bağlı olan rehbere erişimini engelle. Bekleyen otomatik dondurma Ekranınızı kilitlediğinizde \"Aktifleştir & Çalıştır\" seçeneği üzerinden başlatılan uygulamalar otomatik olarak dondurulacaktır. @@ -78,7 +78,7 @@ İş profili atanamadı. Tekrar denemek için Shelter\'ı yeniden başlatın. MIUI yüklü cihazlarda sistem dışı uygulamaların klonlanması henüz mümkün değildir. Lütfen sisteminizde yüklü olan uygulama mağazasını (örn. Google Play Store) iş profilinize klonlayın ve sistem dışı uygulamaları bu klon mağaza üzerinden yükleyin. Shelter, yetkisi dışında kalan bir profile sistem uygulamalarını klonlayamaz. - Shelter, yetkisi dışında kalan bir profilde sistem uygulamalarını kaldıramaz. + Shelter, yetkisi dışında kalan bir profilden sistem uygulamalarını kaldıramaz. İş profili bulunamadı. İş profilini tekrar atamak için lütfen Shelter\'ı yeniden başlatın. Shelter, Android\'in İş Profili özelliğini kullanarak diğer uygulamaları izole bir profilde çalıştırmanızı sağlayan bir uygulamadır. \n @@ -87,7 +87,7 @@ \nTüm bilgileri dikkatlice okumanızı tavsiye ederiz. Üzgünüz, Shelter kurulumu başarısız. \n -\nEğer kurulumu iptal etmediyseniz, kurulumun başarısız olmasının sebebi yüksek ihtimalle Shelter ile başka bir İş Profili yöneticisinin çakışması veya sisteminizin büyük ölçüde değiştirilmiş olmasıdır. Shelter maalesef bu tip sorunlara çözüm getiremez. +\nEğer kurulumu iptal etmediyseniz, kurulumun başarısız olmasının sebebi yüksek ihtimalle Shelter ile başka bir İş Profili yöneticisinin çakışması veya sisteminizin büyük ölçüde değiştirilmiş olmasıdır. Shelter bu tip sorunları maalesef kendi başına çözemez. \n \nÇıkmak için İleri seçeneğine tıklayın. Shelter, çalışmak için herhangi bir izne ihityaç duymaz ancak kurulum sürecini başlattığınızda Shelter bir İş Profili oluşturmayı deneyecek ve bu İş Profilinin profil yöneticisi olacaktır. @@ -98,14 +98,19 @@ Kurulum için hazırlık tamamlandı. Kurulumun son aşamasında bir bildirime tıklamanız gerekiyor. Devam etmeden önce lütfen cihazınızın Rahatsız Etmeyin modunda olmadığından emin olun. \n \nHazır olduğunuzda kurulum sürecini başlatmak için \"İleri\" seçeneğine tıklayın. - Shelter tarafından bir bildirim gelmiş olması lazım. Kurulumu tamamlamak için lütfen bu bildirime tıklayın. + Shelter tarafından size bir bildirim yollandı. Kurulumu tamamlamak için lütfen bu bildirime tıklayın. \n \nEğer bir bildirim gelmediyse, lütfen cihazınızın Rahatsız Etmeyin modunda olmadığından emin olun ve bildirim çekmecenize bakın. \n \nKurulum sürecine baştan başlamak isterseniz lütfen uygulama verilerini sıfırlayın ve uygulamayı yeniden başlatın. İş Profili oluşturuluyor ve Shelter kurulumu yapılıyor. Önplandaki Uygulamalar Dondurulmasın - Kurulum tamamlandı. Shelter yeniden başlatılıyor. Eğer yeniden başlatma otomatik olarak gerçekleşmezse, lütfen Shelter\'ı ana ekran uygulamanız üzerinden tekrar başlatın. - Ekranınızı kilitlediğinizde önplanda çalışan ve görünür etkinliğe sahip uygulamalar dondurulmaz. Bu özellik müzik çalar gibi uygulamaları daha rahat kullanmak için işinize yarayabilir ancak sonrasında bu uygulamaları \"Çoklu Dondurma Kısayolu\" üzerinden dondurmanız gerekir. + Kurulum tamamlandı. Shelter yeniden başlatılıyor. Eğer otomatik başlatma gerçekleşmezse, lütfen Shelter\'ı ana ekran uygulamanız üzerinden tekrar başlatın. + Ekranınızı kilitlediğinizde önplanda çalışan ve görünür etkinliğe sahip olan uygulamalar dondurulmaz. Bu özellik sayesinde müzik çalar gibi uygulamaları daha rahat bir şekilde kullanabilirsiniz ancak sonrasında bu uygulamaları \"Çoklu Dondurma Kısayolu\" üzerinden dondurmanız gerekir. Uygulama başlatılırken İş Profilinin devre dışı bırakıldığı tespit edildi. İş Profilini etkinleştirdiyseniz, değişikliklerin uygulanması için lütfen Shelter\'ı yeniden başlatın. + Etkinleştirildiğinde iki profil arasında dosya göz atma, görüntüleme, seçme, kopyalama işlemleri yapılabilir hale gelir. Bu işlemler, dosya sistemi izolasyonunu bozmadan, YALNIZCA Dosya Gezgini (sisteminizde Dosyalar veya Belgeler olarak adlandırılır) veya Dosya Gezgini özelliğine sahip uygulamalar üzerinden yapılır (bu özelliğe sahip uygulamaların seçtiğiniz dosyalara erişimi geçicidir). + Dosya Köprüsü özelliğini kullanmak için Shelter\'ın Tüm Dosyalara erişmesi gerekiyor. Lütfen \"Tamam\" seçeneğine tıkladıktan sonra İKİ SHELTER UYGULAMASINA DA (Kişisel / İş) bu izni verin. + Dosya Köprüsü özelliğinin düzgün bir şekilde çalışabilmesi için Shelter\'ın Diğer Uygulamalar Üzerinde Göster iznine ihtiyacı var. Lütfen \"Tamam\" seçeneğine tıkladıktan sonra İKİ SHELTER UYGULAMASINA DA (Kişisel / İş) bu izni verin. Bu izin, Dosya Köprüsü hizmetlerini arkaplanda başlatmak için kullanılır. + Bu özelliği kullanmak için Shelter\'ın Kullanım Erişimi iznine ihtiyacı var. Lütfen \"Tamam\" seçeneğine tıkladıktan sonra İKİ SHELTER UYGULAMASINA DA (Kişisel / İş) bu izni verin, aksi takdirde söz konusu özellik düzgün bir şekilde çalışmayabilir. + Başka uygulamalarda kullanmanız için sahte bir kamera uygulaması oluşturur, böylece Dosya Gezgini üzerinden (veya etkinse Dosya Köprüsü üzerinden) herhangi bir görüntü dosyasını bu uygulamalara kameradan çekilmiş bir fotoğraf olarak sunabilirsiniz. Bu özellik, normalde Dosya Gezginine erişimi olmasa bile, kamera uygulamaları üzerinden fotoğraf çekme yetkisine sahip tüm uygulamalar için Dosya Köprüsü özelliğini etkinleştirir. \ No newline at end of file From 43414c453a2b88f1331b846f90ec2ede0872c7e6 Mon Sep 17 00:00:00 2001 From: Alparslan Sakci Date: Tue, 25 May 2021 21:07:05 +0000 Subject: [PATCH 149/355] Translated using Weblate (Turkish) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/tr/ --- app/src/main/res/values-tr/strings.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 9fbb920..ef97372 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -67,9 +67,9 @@ Devam et Shelter, AOSP gibi Android türevleri için geliştirilmiştir. Bu türevlere AOSP (Android Open Source Project), Google Android (Pixel model cihazlarda) ve LineageOS gibi AOSP-tabanlı açık kaynak ROM\'ların çoğu dahildir. Eğer telefonunuzda bu Android türevlerinden biri yüklüyse Shelter büyük ihtimalle sorunsuz bir şekilde çalışacaktır. \n -\nBazı cihaz üreticilerinin Android\'in temel koduna koyduğu aşırı müdahaleci özelleştirmeler cihazda çakışmalara, uyumsuzluklara ve beklenmeyen hatalara yol açabilir. Bazı özel ROM\'lar da uyumluluğu bozan değişiklikler sunabilir ancak bu durum telefon üreticilerinden kaynaklanan hatalara göre daha nadir görülür. +\nBazı cihaz üreticilerinin Android\'in temel koduna koyduğu aşırı müdahaleci özelleştirmeler cihazda çakışmalara, uyumsuzluklara ve beklenmeyen hatalara yol açabilir. Bazı özel ROM\'lar da uyumluluğu bozan değişikliklere sahip olabilir ancak bu durum telefon üreticilerinden kaynaklanan hatalara göre daha nadir görülür. \n -\nShelter, sistemin sağladığı İş Profili özelliği için kullanılabilen bir arayüzden ibarettir. Sistem tarafından sağlanan bu özellik standart dışı ise veya hatalar barındırıyorsa, Shelter bu sorunlara kendi başına çözüm getiremez. İş Profili özelliğini bozduğu bilinen üretici sürümü bir Android kullanıyorsanız bu uyarıyı dikkate almalarını tavsiye ederiz. Shelter, bu koşullar altında düzgün çalışacağını garanti etmez. +\nShelter, sistemin sağladığı İş Profili özelliği için kullanılabilen bir arayüzden ibarettir. Sistem tarafından sağlanan bu özellik standart dışı ise veya hatalar barındırıyorsa, Shelter bu sorunlara kendi başına çözüm getiremez. İş Profili özelliğini bozduğu bilinen üretici sürümü bir Android kullanıyorsanız bu uyarıyı dikkate almalarını tavsiye ederiz. Shelter, bu koşullar altında düzgün çalışacağını garanti etmez. Ana profilin iş profiline bağlı olan rehbere erişimini engelle. Bekleyen otomatik dondurma Ekranınızı kilitlediğinizde \"Aktifleştir & Çalıştır\" seçeneği üzerinden başlatılan uygulamalar otomatik olarak dondurulacaktır. @@ -108,9 +108,9 @@ Kurulum tamamlandı. Shelter yeniden başlatılıyor. Eğer otomatik başlatma gerçekleşmezse, lütfen Shelter\'ı ana ekran uygulamanız üzerinden tekrar başlatın. Ekranınızı kilitlediğinizde önplanda çalışan ve görünür etkinliğe sahip olan uygulamalar dondurulmaz. Bu özellik sayesinde müzik çalar gibi uygulamaları daha rahat bir şekilde kullanabilirsiniz ancak sonrasında bu uygulamaları \"Çoklu Dondurma Kısayolu\" üzerinden dondurmanız gerekir. Uygulama başlatılırken İş Profilinin devre dışı bırakıldığı tespit edildi. İş Profilini etkinleştirdiyseniz, değişikliklerin uygulanması için lütfen Shelter\'ı yeniden başlatın. - Etkinleştirildiğinde iki profil arasında dosya göz atma, görüntüleme, seçme, kopyalama işlemleri yapılabilir hale gelir. Bu işlemler, dosya sistemi izolasyonunu bozmadan, YALNIZCA Dosya Gezgini (sisteminizde Dosyalar veya Belgeler olarak adlandırılır) veya Dosya Gezgini özelliğine sahip uygulamalar üzerinden yapılır (bu özelliğe sahip uygulamaların seçtiğiniz dosyalara erişimi geçicidir). + Etkinleştirildiğinde iki profil arasında dosya göz atma, görüntüleme, seçme ve kopyalama işlemleri yapılabilir hale gelir. Bu işlemler, dosya sistemi izolasyonunu bozmadan, YALNIZCA Dosya Gezgini (sisteminizde Dosyalar veya Belgeler olarak adlandırılır) veya Dosya Gezgini özelliğine sahip uygulamalar üzerinden yapılır (bu özelliğe sahip uygulamaların seçtiğiniz dosyalara erişimi geçicidir). Dosya Köprüsü özelliğini kullanmak için Shelter\'ın Tüm Dosyalara erişmesi gerekiyor. Lütfen \"Tamam\" seçeneğine tıkladıktan sonra İKİ SHELTER UYGULAMASINA DA (Kişisel / İş) bu izni verin. - Dosya Köprüsü özelliğinin düzgün bir şekilde çalışabilmesi için Shelter\'ın Diğer Uygulamalar Üzerinde Göster iznine ihtiyacı var. Lütfen \"Tamam\" seçeneğine tıkladıktan sonra İKİ SHELTER UYGULAMASINA DA (Kişisel / İş) bu izni verin. Bu izin, Dosya Köprüsü hizmetlerini arkaplanda başlatmak için kullanılır. + Dosya Köprüsü özelliğinin düzgün bir şekilde çalışabilmesi için Shelter\'ın Diğer Uygulamalar Üzerinde Göster iznine ihtiyacı var. Lütfen \"Tamam\" seçeneğine tıkladıktan sonra İKİ SHELTER UYGULAMASINA DA (Kişisel / İş) bu izni verin. Söz konusu izin, Dosya Köprüsü hizmetlerini arkaplanda başlatmak için kullanılır. Bu özelliği kullanmak için Shelter\'ın Kullanım Erişimi iznine ihtiyacı var. Lütfen \"Tamam\" seçeneğine tıkladıktan sonra İKİ SHELTER UYGULAMASINA DA (Kişisel / İş) bu izni verin, aksi takdirde söz konusu özellik düzgün bir şekilde çalışmayabilir. - Başka uygulamalarda kullanmanız için sahte bir kamera uygulaması oluşturur, böylece Dosya Gezgini üzerinden (veya etkinse Dosya Köprüsü üzerinden) herhangi bir görüntü dosyasını bu uygulamalara kameradan çekilmiş bir fotoğraf olarak sunabilirsiniz. Bu özellik, normalde Dosya Gezginine erişimi olmasa bile, kamera uygulamaları üzerinden fotoğraf çekme yetkisine sahip tüm uygulamalar için Dosya Köprüsü özelliğini etkinleştirir. + Başka uygulamalarda kullanmanız için sahte bir kamera uygulaması oluşturur ve böylece Dosya Gezgini üzerinden (veya etkinse Dosya Köprüsü üzerinden) herhangi bir görüntü dosyasını bu uygulamalara kameradan çekilmiş bir fotoğraf olarak sunabilirsiniz. Bu özellik, normalde Dosya Gezginine erişimi olmasa bile, kamera uygulamaları üzerinden fotoğraf çekme yetkisine sahip tüm uygulamalar için Dosya Köprüsü özelliğini etkinleştirir. \ No newline at end of file From 37e43c1d8b8b2ea77047e14098dd9dfe3ece906b Mon Sep 17 00:00:00 2001 From: Enol P Date: Sat, 29 May 2021 21:28:52 +0000 Subject: [PATCH 150/355] Added translation using Weblate (Asturian) --- app/src/main/res/values-ast/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/src/main/res/values-ast/strings.xml diff --git a/app/src/main/res/values-ast/strings.xml b/app/src/main/res/values-ast/strings.xml new file mode 100644 index 0000000..a6b3dae --- /dev/null +++ b/app/src/main/res/values-ast/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From 0ec02e769f3f6e54d98c732b1626f6bc4c4ca093 Mon Sep 17 00:00:00 2001 From: Enol P Date: Sun, 30 May 2021 14:04:08 +0000 Subject: [PATCH 151/355] Translated using Weblate (Asturian) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/ast/ --- app/src/main/res/values-ast/strings.xml | 116 +++++++++++++++++++++++- 1 file changed, 115 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-ast/strings.xml b/app/src/main/res/values-ast/strings.xml index a6b3dae..0e3e8ba 100644 --- a/app/src/main/res/values-ast/strings.xml +++ b/app/src/main/res/values-ast/strings.xml @@ -1,2 +1,116 @@ - \ No newline at end of file + + Falemos de los permisos + Compatibilidá + Completóse la configuración de Shelter y va reaniciase. Si Shelter nun s\'anició automáticamente, pues volver llanzalu dende\'l llanzador. + Negóse\'l permisu o\'l preséu nun ta sofitáu + Nun s\'atopó\'l perfil de trabayu. Volvi aniciar l\'aplicación pa volver fornir el perfil, por favor. + Nun pue fornise\'l perfil de trabayu. Pues volver tentalo reaniciando Shelter. + Marchar d\'equí + Siguir + Serviciu d\'aislamientu d\'aplicaciones + Shelter ha convertise n\'alministrador del preséu pa facer les xeres d\'aislamientu. + Escoyer una imaxe + Afáyate en Shelter + Shelter ye una aplicación que t\'ayuda a executar aplicaciones nun perfil aisláu. Esto ye posible per duana de la carauterística Perfil de trabayu d\'Android. +\n +\nCalca «Siguiente» pa consiguir más información tocante a Shelter y guiate pel procesu de configuración. +\n +\nSuxerímoste que lleas con atención les páxines que vienen darréu. + Shelter desendólcase pa y pruébase en derivaos d\'Android asemeyaos a AOSP. Estos derivaos inclúin a AOSP (Android Open Source Project), Google Android (en móviles Pixel) y la mayoría de ROMs personalizaes basaes n\'AOSP como LineageOS. Si esti preséu executa un deriváu d\'estos, entós ye mui probable que Shelter funcione correutamente. +\n +\nDalgunos fabricantes y ROMs personalizaes introducen cambeos invasivos nel códigu d\'Android qu\'orixinen conflictos, incompatibilidaes y comportamientos inesperaos. Sicasí, nel casu de les ROMs personalizaes, ye raro que xurdan fallos. +\n +\nShelter ye namás una interfaz pa la carauterística «Perfil de trabayu» fornida pol sistema. Si esta carauterística la forne un sistema incompatible o que nun ye estándar, Shelter nun pue funcionar máxicamente. Si uses una versión d\'Android modificada pol fabricante y conocida por nun ser compatible con «Perfil de trabayu», sentímoslo. Pues siguir si quies, mas nun hai garantíes de que Shelter se comporte correutamente baxo estes circunstancies. + Prepárate + Yá pues configurar Shelter. Asegúrate primero de que\'l preséu nun ta nel mou «Nun molestar» porque tienes de calcar nun avisu namás finar el procesu de configuración. +\n +\nCuando quieras, calca «Siguiente» pa comenzar el procesu de configuración. + Espera… + Tamos aniciando\'l perfil de trabayu y configurando Shelter nel preséu. + La configuración falló + Llamentamos informate de que nun fuimos a configurar Shelter. +\n +\nSi nun encaboxesti la configuración, entós el problema ye qu\'hai incompatibilidaes col sistema o hai conflictos ente Shelter y otros xestores del perfil de trabayu. Desafortunadamente, nun podemos facer muncho más. +\n +\nCalca «Siguiente» pa colar. + Cuasi acabemos + Agora habríes ver un avisu de Shelter.Calca nel avisu pa finar el procesu de configuración, por favor. +\n +\nSi nun ves esti avisu, asegúrate de que\'l preséu nun ta nel mou «Nun molestar» y espande\'l centru d\'avisos. +\n +\nPa reafitar Shelter y volver comenzar, pues llimpiar los datos de Shelter n\'Axustes. + Avisu importante + Calca equí pa finar la configuración de Shelter + ¡Norabona! Tas a un calcu de finar la configuración de Shelter. + Serviciu d\'aislamientu + Shelter ta n\'execución… + Desactivación automática pendiente + Shelter va desactivar les aplicaciones llanzaes dende «Activar y llanzar» la próxima vegada que se bloquie la pantalla. + Desactivar agora + Instalando… + Perfil principal + Perfil aisláu + [Desactivóse] %s + Operación per llotes + Clonar al perfil aisláu + Clonar al perfil principal + Desinstalar + Desactivar + Activar + Llanzar + Crear l\'atayu d\'activar y/o llanzar + Activar y llanzar + Desactivación automática + Widgets nel perfil principal + Buscar + Desactivación per llotes + Crear l\'atayu de desactivación per llotes + Desactivación + Instalar una APK en Shelter + La instalación d\'aplicaciones nel perfil de trabayu finó. + Amosar toles aplicaciones + Maricar les aplicaciones que s\'anubren pue causar casques y comportamientos inesperaos. Por embargu, esta carauterística pue ser útil cuando, por defeutu, una ROM nun activa toles aplicaciones precises nel perfil de trabayu. Si sigues, failo baxo la to responsabilidá. + Abrir la interfaz de Documentos + Axustes + Interaición + Pasera de ficheros + Al activar la opción, vas ser a restolar/ver/escoyer/copiar ficheros en Shelter dende\'l perfil principal y viceversa. NAMÁS pente la interfaz de Documentos (col nome de Ficheros o Documentos nel llanzador), o pente aplicaciones con sofitu pa la interfaz de Documentos qu\'acceden temporalmente a los ficheros qu\'escueyas nesa interfaz, ensin dexar de tar nel aislamientu del sistema de ficheros. + Selector d\'imáxenes como «Cámara» + Presenta una aplicación de cámara falsa que te permite escoyer una imaxe dende la interfaz de Documentos (y la pasera de ficheros si ta activada) como la semeya fecha. Esto activa la pasera de ficheros pa cualesquier aplicación que sofite l\'usu d\'aplicaciones de cámara pa facer semeyes, magar que nun sofiten nativamente la interfaz de Documentos. + Bloquiar la busca de contautos + Niega l\'accesu dende\'l perfil principal a los contautos del perfil de trabayu. + Servicios + Serviciu de desactivación automática + Al bloquiar la pantalla, desactiva automáticamente les aplicaciones llanzaes dende l\'atayu «Desactivar y llanzar». + Retrasu de la desactivación automática + Omitir les aplicaciones en primer planu + NUN desactiva les aplicaciones en primer planu (con actividá visible) al bloquiar la pantalla. Esto pue ser útil p\'aplicaciones como reproductores multimedia, mas dempués vas tener de desactivales pente l\'atayu de «Desactivación per llotes». + Tocante a + Versión + Códigu fonte + Traducción + Rastrexador de fallos + Paez que desactivesti\'l perfil de trabayu mentanto s\'aniciaba Shelter. Si actives el perfil agora, volvi aniciar Shelter. + L\'aplicación «%s» clonóse con ésitu + L\'aplicación «%s» desinstalóse con ésitu + L\'aplicación «%s» desactivóse con ésitu + L\'aplicación «%s» activóse con ésitu + Nun puen clonase les aplicaciones del sistema a un perfil nel que Shellter nun tien el control. + Nun puen desinstalase les aplicaciones d\'un perfil nel que Shelter nun tien el control. + Nun puen amestase atayos al llanzador. Ponte en contautu col desendolcador pa consiguir más información, por favor. + Operaciones pa %s + Toles aplicaciones de la llista «Desactivación automática» desactiváronse con ésitu. + L\'atayu creóse nel llanzador. + Shelter precisa\'l permisu Estadísitques d\'usu pa facer esto. Activa\'l permisu pa les instancies de Shelter NOS DOS PERFILES nel diálogu dempués de primir «D\'acuerdu». Si nun lo faes, carauterística nun va funcionar afayadizamente. + Nun pue llanzase l\'aplicación %s porque nun tien nenguna interfaz gráfica. + Shelter tien d\'acceder a Tolos ficheros pa la pasera de ficheros. Activa\'l permisu pa les instancies de Shelter NOS DOS PERFILES nel diálogu dempués de primir «D\'acuerdu». + Shelter tien de superponese a otres aplicaciones pa que la pasera de ficheros funcione correutamente. Activa\'l permisu pa les instancies de Shelter NOS DOS PERFILES nel diálogu dempués de primir «D\'acuerdu». Esti permisu úsase p\'aniciar los servicios de la pasera de ficheros en segundu planu. + Anguaño, en MIUI, nun ye posible la clonación de les aplicaciones que nun son del sistema a otru perfil. Clona la tienda d\'aplicaciones del sistema al perfil aisláu y dempués instala les aplicaciones dende ehí, por favor. + Siguir de toes toes + Por defeutu, Shelter nun pide nengún permisu. Por embargu, al siguir col procesu de configuración, Shelter va configurar el perfil de trabayu y convertise nel xestor d\'esi perfil. +\n +\nEsto concede a Shelter una llista estensa de permisos dientro del perfil, comparable al d\'un xestor del preséu, magar que aislaos nesi perfil. Ser el xestor del perfil ye un requirimientu pa la mayoría de funciones de Shelter. +\n +\nDalgunes carauterístiques de Shelter puen riquir más permisos fuera del perfil de trabayu. Cuando seya\'l momentu, Shelter va pidir esos permisos per separtao al activar les carauterístiques correspondientes. + \ No newline at end of file From 239581b34690bea695de71582acb41be6b039a5b Mon Sep 17 00:00:00 2001 From: Alparslan Sakci Date: Mon, 31 May 2021 16:43:42 +0000 Subject: [PATCH 152/355] Translated using Weblate (Turkish) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/tr/ --- app/src/main/res/values-tr/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index ef97372..0e70ba9 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -69,7 +69,7 @@ \n \nBazı cihaz üreticilerinin Android\'in temel koduna koyduğu aşırı müdahaleci özelleştirmeler cihazda çakışmalara, uyumsuzluklara ve beklenmeyen hatalara yol açabilir. Bazı özel ROM\'lar da uyumluluğu bozan değişikliklere sahip olabilir ancak bu durum telefon üreticilerinden kaynaklanan hatalara göre daha nadir görülür. \n -\nShelter, sistemin sağladığı İş Profili özelliği için kullanılabilen bir arayüzden ibarettir. Sistem tarafından sağlanan bu özellik standart dışı ise veya hatalar barındırıyorsa, Shelter bu sorunlara kendi başına çözüm getiremez. İş Profili özelliğini bozduğu bilinen üretici sürümü bir Android kullanıyorsanız bu uyarıyı dikkate almalarını tavsiye ederiz. Shelter, bu koşullar altında düzgün çalışacağını garanti etmez. +\nShelter, sistemin sağladığı İş Profili özelliği için kullanılabilen bir arayüzden ibarettir. Sistem tarafından sağlanan bu özellik standart dışı ise veya hatalar barındırıyorsa, Shelter bu sorunlara kendi başına çözüm getiremez. İş Profili özelliğini bozduğu bilinen üretici sürümü bir Android kullanıyorsanız bu uyarıyı dikkate almanızı tavsiye ederiz. Shelter, bu koşullar altında düzgün çalışacağını garanti etmez. Ana profilin iş profiline bağlı olan rehbere erişimini engelle. Bekleyen otomatik dondurma Ekranınızı kilitlediğinizde \"Aktifleştir & Çalıştır\" seçeneği üzerinden başlatılan uygulamalar otomatik olarak dondurulacaktır. From 5203ceae2c5d386bf75975242a22b3f486361d14 Mon Sep 17 00:00:00 2001 From: Martin Jurina Date: Tue, 1 Jun 2021 19:59:15 +0000 Subject: [PATCH 153/355] Added translation using Weblate (Czech) --- app/src/main/res/values-cs/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/src/main/res/values-cs/strings.xml diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml new file mode 100644 index 0000000..a6b3dae --- /dev/null +++ b/app/src/main/res/values-cs/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From d9875b32bde39f5397f948520850f28101012148 Mon Sep 17 00:00:00 2001 From: Martin Jurina Date: Tue, 1 Jun 2021 20:03:11 +0000 Subject: [PATCH 154/355] Translated using Weblate (Czech) Currently translated at 13.2% (13 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/cs/ --- app/src/main/res/values-cs/strings.xml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index a6b3dae..0e61183 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -1,2 +1,9 @@ - \ No newline at end of file + + Vyber obrázek + Sbohem + Pokračovat + Služba izolace aplikací + Shelter musí být správcem zařízení, aby mohl provádět úkoly. + Vítejte v Shelteru + \ No newline at end of file From 8df4430682b7d3c280daa0b4272104a8c1c55d79 Mon Sep 17 00:00:00 2001 From: Enol P Date: Fri, 4 Jun 2021 00:33:09 +0000 Subject: [PATCH 155/355] Translated using Weblate (Asturian) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/ast/ --- app/src/main/res/values-ast/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-ast/strings.xml b/app/src/main/res/values-ast/strings.xml index 0e3e8ba..598c2b9 100644 --- a/app/src/main/res/values-ast/strings.xml +++ b/app/src/main/res/values-ast/strings.xml @@ -102,10 +102,10 @@ Operaciones pa %s Toles aplicaciones de la llista «Desactivación automática» desactiváronse con ésitu. L\'atayu creóse nel llanzador. - Shelter precisa\'l permisu Estadísitques d\'usu pa facer esto. Activa\'l permisu pa les instancies de Shelter NOS DOS PERFILES nel diálogu dempués de primir «D\'acuerdu». Si nun lo faes, carauterística nun va funcionar afayadizamente. + Shelter precisa\'l permisu Estadístiques d\'usu pa facer esto. Activa\'l permisu pa les instancies de Shelter DE LOS DOS PERFILES nel diálogu qu\'apaez dempués de primir «D\'acuerdu». Si nun lo faes, carauterística nun va funcionar afayadizamente. Nun pue llanzase l\'aplicación %s porque nun tien nenguna interfaz gráfica. - Shelter tien d\'acceder a Tolos ficheros pa la pasera de ficheros. Activa\'l permisu pa les instancies de Shelter NOS DOS PERFILES nel diálogu dempués de primir «D\'acuerdu». - Shelter tien de superponese a otres aplicaciones pa que la pasera de ficheros funcione correutamente. Activa\'l permisu pa les instancies de Shelter NOS DOS PERFILES nel diálogu dempués de primir «D\'acuerdu». Esti permisu úsase p\'aniciar los servicios de la pasera de ficheros en segundu planu. + Shelter tien d\'acceder a Tolos ficheros pa la pasera de ficheros. Activa\'l permisu pa les instancies de Shelter DE LOS DOS PERFILES nel diálogu qu\'apaez dempués de primir «D\'acuerdu». + Shelter tien de superponese a otres aplicaciones pa que la pasera de ficheros funcione correutamente. Activa\'l permisu pa les instancies de Shelter DE LOS DOS PERFILES nel diálogu qu\'apaez dempués de primir «D\'acuerdu». Esti permisu úsase p\'aniciar los servicios de la pasera de ficheros en segundu planu. Anguaño, en MIUI, nun ye posible la clonación de les aplicaciones que nun son del sistema a otru perfil. Clona la tienda d\'aplicaciones del sistema al perfil aisláu y dempués instala les aplicaciones dende ehí, por favor. Siguir de toes toes Por defeutu, Shelter nun pide nengún permisu. Por embargu, al siguir col procesu de configuración, Shelter va configurar el perfil de trabayu y convertise nel xestor d\'esi perfil. From 2d4a3b6ff715b8fe1fd42f28e228e706cd8cf542 Mon Sep 17 00:00:00 2001 From: Judistirav Date: Fri, 11 Jun 2021 12:52:28 +0000 Subject: [PATCH 156/355] Added translation using Weblate (Indonesian) --- app/src/main/res/values-id/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/src/main/res/values-id/strings.xml diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml new file mode 100644 index 0000000..a6b3dae --- /dev/null +++ b/app/src/main/res/values-id/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From ff862e08d36244d49c5337612fd92cc953804dc8 Mon Sep 17 00:00:00 2001 From: Judistirav Date: Fri, 11 Jun 2021 12:53:12 +0000 Subject: [PATCH 157/355] Translated using Weblate (Indonesian) Currently translated at 15.3% (15 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/id/ --- app/src/main/res/values-id/strings.xml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index a6b3dae..22054bb 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -1,2 +1,15 @@ - \ No newline at end of file + + Selamat tinggal + Lanjutkan + Shelter harus menjadi Admin Perangkat untuk melakukan tugas isolasinya. + Layanan Isolasi Aplikasi + Pilih File Gambar + Selamat datang di Shelter + Sepatah kata tentang izin + Shelter adalah aplikasi untuk membantu Anda menjalankan aplikasi lain dalam profil yang terisolasi. Ia melakukannya dengan memanfaatkan fitur Profil Kerja Android. +\n +\nKlik \"Selanjutnya\", dan kami akan memberi Anda informasi tentang Shelter dan petunjuk untuk menyelesaikan proses pengaturan. +\n +\nKami menyarankan Anda membaca semua halaman berikut dengan cermat. + \ No newline at end of file From 87143bb666f33eb548324727cba3d9d80ff00deb Mon Sep 17 00:00:00 2001 From: solokot Date: Sun, 13 Jun 2021 06:24:52 +0000 Subject: [PATCH 158/355] Translated using Weblate (Russian) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/ru/ --- app/src/main/res/values-ru-rRU/strings.xml | 104 ++++++++++++++------- 1 file changed, 70 insertions(+), 34 deletions(-) diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 31a9f7f..d3f2916 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -11,22 +11,22 @@ \nВам нужно будет кликнуть на оповещение для успешного завершения установки, убедитесь, что устройство находится НЕ в режиме \"Не беспокоить\". Выход Продолжить - Сервис изоляции приложений - Shelter требуется стать Аднимистратором устройства, чтобы управлять изоляцией. - Сервис Shelter + Служба изоляции приложений + Shelter требуется стать администратором устройства, чтобы управлять изоляцией. + Служба Shelter Shelter запущен … Основной Shelter [Замороженно] %s - Клонировать в Shelter (Рабочий профиль) - Клонировать в Основной рофиль + Клонировать в Shelter (рабочий профиль) + Клонировать в основной профиль Удалить Заморозить Разморозить Запустить Создать ярлык для разморозки и/или запуска Разморозить и запустить - Авто заморозка + Автозаморозка Групповая заморозка Создать ярлык групповой заморозки Заморозить @@ -34,30 +34,30 @@ О программе Версия Исходный код - Трекер багов и проблем + Отслеживание проблем Вам необходимо дать Shelter права Администратора устройства для правильной работы. Пожалуйста, попробуйте снова. Пожалуйста подождите пока мы подготавливаем профиль Shelter для вас … - Настройка Shelter завершена. Перезапускаем Shelter. Если Shelter не откроется сам, запустите его из вашего лаучнера. - Доступ запрещен или устройство не поддерживается - Рабочий профиль не найден. Пожалуйста, перезапустите приложение чтобы пересоздать профиль. - Невозможно создать Рабочий профиль. Вы можете попробовать снова перезапустив Shelter. - Похоже, что вы отключили Рабочий режим пока Shelter запускался. Если вы включили его сейчас то перезапустите Shelter. - Приложение %s успешно клонированно - Приложение %s успешно удалено - Приложение %s успешно заморожено - Приложение %s успешно разморожено - Невозможно клонировать системные приложения в профиль который Shelter не контролирует. - Невозможно удалить системные приложения в профиле который Shelter не контролирует. + Настройка Shelter завершена. Перезапускам Shelter. Если Shelter не откроется сам, запустите его из вашего лаучнера. + Доступ запрещён или устройство не поддерживается + Рабочий профиль не найден. Перезапустите приложение, чтобы пересоздать профиль. + Невозможно создать рабочий профиль. Вы можете попробовать снова, перезапустив Shelter. + Похоже, что вы отключили рабочий режим, пока Shelter запускался. Если вы включили его сейчас, то перезапустите Shelter. + Приложение \"%s\" успешно клонировано + Приложение \"%s\" успешно удалено + Приложение \"%s\" успешно заморожено + Приложение \"%s\" успешно разморожено + Невозможно клонировать системные приложения в профиль, который Shelter не контролирует. + Невозможно удалить системные приложения в профиле, который Shelter не контролирует. Невозможно добавить ярлык в ваш лаунчер. Пожалуйста, свяжитесь с разработчиком. Операции для %s - Все приложения в списке Авто заморозки были успешно замороженны. + Все приложения в списке автозаморозки были успешно заморожены. Ярлык создан в вашем лаунчере. - Клонирование не системных приложений в другой профиль невозможно на MIUI в данный момент. Пожалуйста, клонируйте магазин приложений вашей системы (например Play Store) в ваш другой профиль и установите приложения оттуда. - Нажмите чтобы завершить настройку Shelter + Клонирование несистемных приложений в другой профиль невозможно на MIUI в данный момент. Пожалуйста, клонируйте магазин приложений вашей системы (например, Play Store) в ваш другой профиль и установите приложения оттуда. + Нажмите, чтобы завершить настройку Shelter Установка... Разрешить виджеты в основном профиле Поиск - Автозаморозка подготовлена + Ожидание автозаморозки Заморозить Выбрать несколько Показать все приложения @@ -65,27 +65,63 @@ Выбор изображения вместо доступа к камере Открыть просмотр файлов Взаимодействие - Автозаморозка - Когда экран заблокирован автоматически замораживать приложения запущенные с помощью иконок \"Разморозить и запустить\". + Служба автозаморозки + При блокировке экрана автоматически замораживать приложения, запущенные с помощью ярлыка \"Разморозить и запустить\". Задержка автозаморозки - Shelter необходим доступ ко всем файлам для переноса файлов. Пожалуйста дайте разрешение приложениям Shelter в ОБОИХ профилях (Основном / Рабочем) в диалогах которые появятся после того как вы нажмёте \"OK\". - Сервисы + Shelter необходим доступ ко всем файлам для переноса файлов. Пожалуйста, дайте разрешение приложениям Shelter в ОБОИХ профилях (основном и рабочем) в диалогах, которые появятся после того, как вы нажмёте \"OK\". + Службы Всё равно продолжить Выберите файл с изображением - Shelter важное + Shelter: важное Поздравляем! Вы в одном шаге от завершения настройки Shelter. Установить APK в Shelter Приложение установлено в рабочий профиль. Запретить отслеживание контактов Перевод Запретить получать доступ к контактам в рабочем профиле из основного профиля. - Когда включено, вы сможете искать / просматривать / выбирать / копировать файлы в Shelter из рабочего профиля и обратно ТОЛЬКО через системную функцию просмотра файлов (системное приложение которое называется \"Файлы\" или \"Документы\" на вашем устройстве) или приложения которые используют системную функцию просмотра файлов (таким образом возможно получить лишь временный доступ к файлам), при этом разделение файловой системы остаётся нетронутым. - Предоставлять фейковую функцию камеры другим приложениям, что даст вам возможность выбирать сохранённое изображение через функцию просмотра файлов (или перенос файлов, если он активирован) в качестве сделанного снимка. Это включает перенос файлов любому установленному приложению которое вызывает приложение камеры для того чтобы сделать и получить фото, даже если оно не использует просмотр файлов напрямую. - Управление приложениями не отображаемыми в списке может привести к сбоям и различным непредсказуемым последствиям. Однако, эта возможность может быть полезна в случае если производитель вашего устройства не разрешает всем системным приложениям быть использованными в рабочем профиле по умолчанию. Пожалуйста подумайте, хотите ли вы продолжить. + Когда включено, вы сможете искать / просматривать / выбирать / копировать файлы в Shelter из рабочего профиля и обратно ТОЛЬКО через системную функцию просмотра файлов (системное приложение, которое называется \"Файлы\" или \"Документы\" на вашем устройстве) или приложения, которые используют системную функцию просмотра файлов (таким образом возможно получить лишь временный доступ к файлам), при этом разделение файловой системы остаётся нетронутым. + Имитировать функцию камеры для других приложений, что даст вам возможность выбирать сохранённое изображение через функцию просмотра файлов (или перенос файлов, если он активирован) в качестве сделанного снимка. Эта функция позволяет перенести файлы любому установленному приложению, которое вызывает приложение камеры для того, чтобы сделать и получить фотографию, даже если оно не использует просмотр файлов напрямую. + Управление приложениями, не отображаемыми в списке, может привести к сбоям и различным непредсказуемым последствиям. Однако, эта возможность может быть полезна в случае, если производитель вашего устройства не разрешает всем системным приложениям быть использованными в рабочем профиле по умолчанию. Пожалуйста, подумайте, хотите ли вы продолжить. Пропускать активные приложения - НЕ замораживать активные приложение (с видимой активностью) при блокировке экрана. Это может быть полезно для приложений типа аудио-плеера, но потом вам нужно будет их отдельно замораживать через ярлык \"Массовая заморозка\". - Shelter необходимо разрешение на отрисовку поверх других приложений для того чтобы функция переноса файлов работала корректно. Пожалуйста дайте разрешение приложениям Shelter в ОБОИХ профилях (Основном / Рабочем) в диалогах которые появятся после того как вы нажмёте \"OK\". Это разрешение необходимо для того чтобы перенос файлов мог работать в бэкграунде. - Shelter необходим доступ к истории использования приложений для того чтобы сделать это. Пожалуйста дайте разрешение приложениям Shelter в ОБОИХ профилях (Основном / Рабочем) в диалогах которые появятся после того как вы нажмёте \"OK\". В противном случае эта возможность не будет работать корректно. - Невозможно запустить приложение %s потому что оно не имеет графического интерфейса. + НЕ замораживать активные приложение (с видимой активностью) при блокировке экрана. Это может быть полезно для приложений типа аудиопроигрывателя, но потом вам нужно будет их отдельно замораживать через ярлык \"Групповая заморозка\". + Shelter необходимо разрешение на отображение поверх других приложений для того, чтобы функция переноса файлов работала корректно. Пожалуйста, дайте разрешение приложениям Shelter в ОБОИХ профилях (основном и рабочем) в диалогах, которые появятся после того, как вы нажмёте \"OK\". Это разрешение необходимо для того, чтобы перенос файлов мог работать в фоновом режиме. + Для этого Shelter необходим доступ к истории использования приложений. Пожалуйста, дайте разрешение приложениям Shelter в ОБОИХ профилях (основном и рабочем) в диалогах, которые появятся после того, как вы нажмёте \"OK\". В противном случае эта возможность не будет работать правильно. + Невозможно запустить приложение %s, потому что оно не имеет графического интерфейса. Shelter автоматически заморозит приложения, запущенные с помощью \"Разморозить и запустить\" при следующей блокировке экрана. + Добро пожаловать в Shelter + Пару слов о разрешениях + Совместимость + Установка не выполнена + Требуется действие + Готовы\? + Подождите… + Выполняется инициализация рабочего профиля и настройка Shelter на вашем устройстве. + Приготовления к установке Shelter выполнены. Убедитесь, что ваше устройство не в режиме \"Не беспокоить\", потому что вам нужно будет позже нажать на уведомление, чтобы завершить процесс настройки. +\n +\nКогда будете готовы, нажмите \"Далее\", чтобы начать процесс настройки. + Shelter – это приложение, которое поможет вам запускать другие приложения в изолированном профиле. Для этого используется функция Android Рабочий профиль. +\n +\nНажмите \"Далее\", чтобы узнать дополнительную информацию о Shelter и выполнить установку. +\n +\nМы рекомендуем вам внимательно прочитать все следующие страницы. + К сожалению, установить Shelter оказалось невозможно. +\n +\nЕсли вы сами не отменили установку, то причина сбоя чаще всего связана с сильно изменённой системой или конфликтом между Shelter и другими менеджерами рабочих профилей. Со своей стороны мы мало что можем с этим поделать. +\n +\nНажмите \"Далее\", чтобы выйти. + Сейчас вы должны увидеть уведомление от Shelter. Нажмите на это уведомление, чтобы завершить процесс установки. +\n +\nЕсли вы не видите уведомление, убедитесь, что ваше устройство не находится в режиме \"Не беспокоить\", и попробуйте открыть панель уведомлений. +\n +\nЧтобы попробовать начать всё сначала, вы можете очистить данные Shelter в настройках приложения. + По умолчанию Shelter не запрашивает никаких разрешений для себя. Однако, как только вы продолжите процесс настройки, Shelter попытается установить рабочий профиль и, следовательно, стать менеджером профиля. +\n +\nЭто даст Shelter обширный список прав внутри профиля, сравнимый с правами администратора устройства, хотя и ограниченный профилем. Быть менеджером профиля необходимо для большинства функций Shelter. +\n +\nНекоторые расширенные функции Shelter могут потребовать дополнительных разрешений за пределами рабочего профиля. При необходимости Shelter запросит эти разрешения отдельно, когда вы включите соответствующие функции. + Shelter разрабатывается и тестируется на AOSP-подобных системах Android. Они включают в себя AOSP (Android Open Source Project), Google Android (на устройствах Pixel) и большинство пользовательских ROM с открытым исходным кодом на базе AOSP, таких как LineageOS. Если на вашем устройстве установлена одна из вышеперечисленных систем Android, поздравляем! Shelter скорее всего будет правильно работать на вашем устройстве. +\n +\nНекоторые производители устройств вносят очень серьёзные изменения в кодовую базу Android, что приводит к конфликтам, несовместимости и неожиданному поведению. В некоторые пользовательские ROM также могут вноситься изменения, нарушающие совместимость, но, как правило, это более редкие случаи по сравнению с несовместимостью, вносимой производителем устройства. +\n +\nShelter – это всего лишь интерфейс к функции рабочего профиля, предоставляемой системой. Если функция, предоставляемая системой, не работает или реализована нестандартно, Shelter не сможет волшебным образом решить проблему самостоятельно. Если вы используете модифицированную производителем версию Android, про которую известно, что в ней нарушены рабочие профили, вас предупредили. Вы можете продолжить установку в любом случае, но нет никакой гарантии, что Shelter будет работать правильно в этих обстоятельствах. \ No newline at end of file From e72e5e3e4c6ea7f562ed4b1d8a5b957d86a22fea Mon Sep 17 00:00:00 2001 From: ling Date: Fri, 2 Jul 2021 01:23:43 +0000 Subject: [PATCH 159/355] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/zh_Hans/ --- app/src/main/res/values-zh-rCN/strings.xml | 68 +++++++++++++++++----- 1 file changed, 52 insertions(+), 16 deletions(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index abd5c6a..27605d6 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -13,7 +13,7 @@ Shelter 服务 Shelter 正在运行 … 自动冻结等待中 - Shelter 将会在您下次锁屏时自动冻结使用 \"解冻并运行\" 启动的应用 + Shelter 将会在您下次锁屏时自动冻结使用 \"解冻并运行\" 启动的应用。 立刻冻结 主用户 @@ -37,7 +37,7 @@ 创建批量冻结快捷方式 冻结 安装 APK 到 Shelter - 已成功在工作用户内安装 APK + 已成功在工作用户内安装 APK。 显示全部应用 对列表中默认隐藏的应用执行操作可能导致崩溃以及其他各种无法预料的行为。但是,当您的手机厂商没有正确在工作用户中开启所有必要的系统组件应用的时候,这个功能可以帮助您解决问题。如果您选择继续,您确保您了解您在做什么,Shelter 无法提供任何保证。 打开文件管理器 @@ -50,7 +50,7 @@ 向其他 App 提供一个伪装的相机 App,允许您从 Documents UI (包括 "文件穿梭" 功能) 选择任意文件作为 "拍摄结果"。这将使您能够在任何支持调用系统相机的 App 中选择来自 "文件穿梭" 的文件,无论 App 本身是否支持 Documents UI。 服务 自动冻结服务 - 在您锁屏时,自动冻结您通过 \"解冻并运行\" 启动的应用 + 在您锁屏时,自动冻结您通过 \"解冻并运行\" 启动的应用。 冻结延时 跳过前台应用 在您锁屏的时候,不要冻结前台应用 (锁屏时仍有可见窗口的应用)。这主要用于音乐播放器等 App,但您将需要在使用完成后手动使用 \"批量冻结\" 快捷方式冻结它们。 @@ -61,30 +61,66 @@ Shelter 必须拥有设备管理员权限以正常工作,请再试一次 正在为您准备 Shelter, 请稍候 … - Shelter 已初始化完成,正在启动 Shelter。如果 Shelter 没有自动启动,请您从启动器手动启动它 + Shelter 已初始化完成,正在启动 Shelter。如果 Shelter 没有自动启动,请您从启动器手动启动它。 权限不足 / 设备不兼容 - 工作用户不可用,请重新启动 Shelter 以重新初始化 - 无法创建工作用户,您可以重启 Shelter 并再试一次 - 工作模式 (Work Mode) 已被您关闭,请开启后再启动 Shelter + 工作用户不可用,请重新启动 Shelter 以重新初始化。 + 无法创建工作用户,您可以重启 Shelter 并再试一次。 + 工作模式 (Work Mode) 已被您关闭,请开启后再启动 Shelter。 应用 \"%s\" 克隆成功 应用 \"%s\" 卸载成功 应用 \"%s\" 冻结成功 应用 \"%s\" 解冻成功 - 无法将系统应用克隆到 Shelter 无权管理的用户下 - 无法在 Shelter 无权管理的用户下卸载系统应用 - 无法在您的启动器上添加快捷方式,请联系开发者 + 无法将系统应用克隆到 Shelter 无权管理的用户下。 + 无法在 Shelter 无权管理的用户下卸载系统应用。 + 无法在您的启动器上添加快捷方式,请联系开发者获得更多信息。 %s 可用操作 - 所有在 \"自动冻结\" 列表中的应用都已经冻结成功 - 快捷方式已创建 - Shelter 需要 使用情况数据 来做这件事。请在按 \"确定\" 后出现的窗口中,对 两个 Shelter 打开此权限。如果没有全部打开,该功能将无法正确运作。 - 无法启动没有用户界面的应用 %s + 所有在 \"自动冻结\" 列表中的应用都已经成功冻结。 + 快捷方式已创建。 + Shelter需要使用统计权限来做这个。请在点按「确定」后出现的窗口中为两个 Shelter 应用程式均授予此权限,如果没有授权会导致此功能无法正常运作。 + 无法启动没有用户界面的应用 %s。 - 目前无法在 MIUI 上克隆非系统应用。请先克隆您的系统应用商店 (如 Play Store) 然后从克隆的应用商店中安装应用 + 在MIUI上,克隆非系统应用程序到另一个配置文件目前是不可能的。请将您的系统应用商店(如Play Store)克隆到其他配置文件,然后从那里安装应用。 无视并继续 正在安装…… File Shuttle 需要访问 全部文件 的权限。请在接下来的对话框中对 两个 Shelter (工作用户内 / 外) 都启用该权限。 File Shuttle 需要 悬浮窗 权限才能在 Shelter 不在运行时正常启动。请在接下来的对话框中对 两个 Shelter (工作用户内 / 外) 都打开该权限。 翻译 阻止访问联系人 - 阻止主用户中的应用访问工作用户的联系人资料 + 阻止主用户中的应用访问工作用户的联系人资料。 + 欢迎来到Shelter + 关于权限的说明 + 兼容性 + 准备好? + 我们现在已准备好为您设置 Shelter。 请首先确保您的设备是 不是 请勿打扰模式,因为您需要 点击通知 稍后完成设置过程。 +\n +\n准备好后,单击“下一步”开始设置过程。 + 请稍等… + 我们正在尝试初始化工作档案并在您的设备上设置 Shelter。 + 安装失败 + 我们很遗憾地通知您,我们无法为您设置Shelter。 +\n +\n如果您没有手动取消设置,那么失败的最常见原因是系统被大量修改,或者 Shelter 与其他工作配置文件管理器之间存在冲突。 不幸的是,我们对此无能为力。 +\n +\n单击下一步退出。 + 需要采取的行动 + 您现在应该会看到来自 Shelter 的通知。 请点击该通知 完成设置过程。 +\n +\n如果您没有看到通知,请确保您的设备未处于“请勿打扰”模式并尝试下拉通知中心。 +\n +\n要重置 Shelter 并重新开始,您可以在设置中清除 Shelter 的数据。 + Shelter是一个帮助你在一个独立的配置文件中运行其他应用程序的应用程序。它通过利用Android的工作档案功能来实现。 +\n +\n点击 \"下一步\",我们将向你提供更多关于Shelter的信息,并指导你完成设置过程。 +\n +\n我们建议你仔细阅读以下所有的页面。 + 默认情况下,Shelter不会要求任何个人权限。然而,一旦你继续进行设置过程,Shelter将尝试设置一个工作档案,并成为此档案的档案管理员。 +\n +\n这将授予Shelter在配置文件内的大量权限,与设备管理员的权限相当,尽管只限于配置文件内。为了实现Shelter的大部分功能成为档案管理员是必要的。 +\n +\nShelter 的一些高级功能可能需要更多权限外部工作资料。当需要时,Shelter将在你启用相应的功能时单独要求这些权限。 + Shelter是在类似AOSP的安卓衍生品上开发和测试的。这包括AOSP(安卓开源项目),谷歌安卓(在Pixels上),以及大多数基于AOSP的开源定制ROM,如LineageOS。如果你的手机正在运行上面列出的安卓衍生品之一,那么恭喜你!Shelter可能会正常工作。Shelter可能会在你的设备上正确工作。 +\n +\n一些设备供应商在安卓代码库中引入了非常具有侵略性的定制,导致冲突、不兼容和意外行为。一些定制的ROM也会引入破坏兼容性的变化,但一般来说,与手机供应商引入的不兼容问题相比,这些情况更少发生。 +\n +\nSheler只是一个进入系统所提供的工作档案功能的接口。如果系统提供的功能是坏的或不标准的,Shelter不可能自己神奇地解决这个问题。如果你目前使用的是供应商修改过的Android版本,而该版本已知会破坏工作档案,你已经被警告了。你可以继续进行,但不能保证Shelter在这些情况下的行为是正常的。 \ No newline at end of file From f8123d5e93dc677cc0fede88f4e4a8a155533efe Mon Sep 17 00:00:00 2001 From: mezysinc Date: Mon, 23 Aug 2021 01:47:00 +0000 Subject: [PATCH 160/355] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/pt_BR/ --- app/src/main/res/values-pt-rBR/strings.xml | 124 +++++++++++++-------- 1 file changed, 80 insertions(+), 44 deletions(-) diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index aa3cdcf..e277c07 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -12,80 +12,116 @@ Tchau Continuar Serviço de Isolamento - Shelter precisa tornar-se Administrador de dispositivo a fim de realizar suas tarefas de isolamento. + Shelter precisa tornar-se o Administrador do dispositivo com o objetivo de executar as tarefas de isolamento. Escolha um arquivo de imagem Shelter Importante - Clique aqui para terminar a configuração de Shelter - Parabéns! Você está a um clique de concluir a configuração de Shelter. - Serviço Shelter - Shelter está em funcionamento … + Clique aqui para concluir a configuração do Shelter + Parabéns! Você está a um clique para concluir a configuração do Shelter. + Serviço do Shelter + O Shelter está executado … Auto-suspensão pendente - Shelter auto-suspenderá aplicativos executados de \"Ativar de novo & Executar\" no próximo evento de bloqueio de tela. + O Shelter suspenderá automaticamente os apps executados de \"Ativar de novo & Iniciar\" no próximo intento de bloqueio da tela. Suspender Agora Instalando... Principal Shelter [Suspenso] %s - Operação Batch - Clonar para Shelter (Perfil de trabalho) - Clonar para Perfil Principal + Operação em grupo + Clonar ao Shelter (Perfil do trabalho) + Clonar ao Perfil Principal Desinstalar Suspender Ativar Iniciar - Criar Ativar e/ou Create Unfreeze and/or Atalho de lançamento + Criar Ativar de novo e/ou Atalho de Iniciar Ativar e Iniciar Auto-Suspender Permitir Widgets no Perfil Principal Buscar - Suspensão Batch - Criar atalho para Suspensão Batch + Suspensão em grupo + Criar atalho para Suspensão em grupo Suspender Instalar APK no Shelter - Instalação do aplicativo no perfil de trabalho foi concluído. - Mostrar todos os aplicativos - Manipular aplicativos que estão ocultos da lista pode causar falhas e todo tipo de comportamento inesperado. Entretanto, este recurso pode ser útil quando ROMs personalizados com defeito não habilitam todos os aplicativos de sistema necessárias no perfil de trabalho por padrão. Se você continuar, você está com sua própria sorte. + Instalação do app no perfil de trabalho foi concluído. + Mostrar todos os apps + Manipular os apps que estão ocultos da lista pode causar falha e todo tipo de comportamento inesperado. Entretanto, este recurso pode ser útil quando ROMs personalizados com defeitos não ativam, por padrão, todos os apps necessários do sistema no perfil de trabalho. Se continuar, você está por conta própria. Configurações - Traslado De Arquivos - Quando ativado, você será capaz de navegar / ver / escolher / copiar arquivos no Shelter de perfil principal e vice-versa, SOMENTE através da Interface de Usuário de Documentos (Arquivos ou Documentos em seu lançador) ou aplicativos com suporte da Interface de Usuário de Documentos (eles só ganham acesso temporário aos arquivos que você escolher na Interface de Usuário de Documentos), enquanto ainda pertencem ao isolamento do sistema de arquivos. - Selecionador de imagens como câmera falsa - Apresente um aplicativo de câmera falsa para outros aplicativos, permitindo que você escolha uma imagem arbitrária da Interface de Documentos (e do Traslado De Arquivos, se ativado) como a foto tirada. Isto permite que o Traslado De Arquivos coopera com qualquer aplicativo que suporte a invocação de outros aplicativos de câmera para tirar uma foto, mesmo que eles não suportem a Document UI nativamente. + Traslado de arquivos + Quando ativado, você será capaz de navegar / ver / escolher / copiar arquivos no Shelter de perfil principal e vice-versa, SOMENTE através da IU de Documentos (Arquivos ou Documentos em seu lançador) ou apps com suporte à Interface de Usuário de Documentos (eles só obtém acesso temporário aos arquivos que você escolher via IU de Documentos), enquanto ainda pertencentes ao isolamento do sistema de arquivos. + Seletor de imagens como câmera falsa + Apresentar um app de câmera falsa para outros apps, permitindo que você escolha uma imagem da sua escolha da Interface de Documentos (e do Traslado de arquivos, se ativado) como a foto feita. Isto permite que o Traslado de arquivos coopera com qualquer app que suporte a invocação de outros apps de câmera para tirar uma foto, mesmo que eles não suportem a IU de Documentos nativamente. Serviços Serviço de Auto-Suspensão - Quando a tela é bloqueada, suspende automaticamente os aplicativos lançados de \"Ativar & Atalho de lançamento\". - Atraso de Auto Suspensão - Omitir aplicativos em primeiro plano - NÃO suspende aplicativos em primeiro plano (com atividade visível) quando você bloqueia sua tela. Isto pode ser útil para aplicativos como reprodutor de música, mas você precisará suspender ele manualmente através do Atalho de Suspensão Batch depois. + Quando a tela for bloqueada, suspende automaticamente os apps executados de \"Ativar & Atalho de Iniciar\". + Atraso de Auto-Suspensão + Ignorar os apps em primeiro plano + NÃO suspenda os apps em primeiro plano (com atividade visível) quando a tela for bloqueada. Isto pode ser útil para apps como reprodutor de música, mas será necessário suspendê-los manualmente depois, através do \"Atalho de suspensão em grupo\". Sobre Versão Código Fonte Favor, aguarde enquanto nos preparamos perfil de Shelter para você … - Configuração de Shelter concluída. Reiniciando Shelter. Se Shelter não começou automaticamente, você pode lançá-lo novamente de seu lançador. - Ou a permissão é negada ou dispositivo não é suportado - Perfil de trabalho não encontrado. Favor reiniciar o aplicativo para reprovisionar o perfil. - Não é possível fornecer perfil de trabalho. Você pode tentar novamente reiniciando Shelter. - Parece que você desativou o Modo de Trabalho ao iniciar Shelter. Se você ativou agora, por favor, inicie de novo o Shelter. - Aplicativo \"%s\" desinstalado com êxito - Aplicativo \"%s\" suspenso com êxito - Aplicativo \"%s\" activo novamente - Não é possível clonar aplicativos do sistema num perfil sobre qual Shelter não tem controle. - Não é possível desinstalar aplicativos de sistema num perfil sobre qual Shelter não tem controle. - Não é possível adicionar atalhos ao seu lançador. Favor entrar em contato com o desenvolvedor para mais informações. + Configuração do Shelter concluída. Reiniciando o Shelter. Se o Shelter não iniciar automaticamente, você pode executá-lo novamente do seu lançador. + Ou a permissão foi negada ou dispositivo não é suportado + Perfil de trabalho não encontrado. Por favor reinicie o App para reprovisionar o perfil. + Não é possível disponibilizar o perfil de trabalho. Você pode tentar novamente reiniciando o Shelter. + Parece que você desativou o Modo de Trabalho ao iniciar o Shelter. Se você tiver ativado neste momento, por favor, inicie o Shelter de novo. + O app \"%s\" foi desinstalado com sucesso + O app \"%s\" foi suspenso com sucesso + O app \"%s\" foi ativado com sucesso + Não é possível clonar apps do sistema ao perfil sobre qual o Shelter não tem controle. + Não é possível desinstalar apps de sistema do perfil sobre qual o Shelter não tem controle. + Não é possível adicionar atalhos ao seu lançador. Entre em contato com o desenvolvedor para mais detalhes. Operações para %s - Todos os aplicativos na lista de \"Auto-Suspensão\" foram suspensos com êxito. - Atalho criado em seu lançador. - Shelter precisa <b>Estatísticas de uso</b> permissão para fazer isso. Favor, ative a permissão para <b>AMBOS DOS DOIS</b> aplicativos de Shelter mostradas no diálogo depois que você pressionar \"Ok\". Se isso não for feito, essa funcionalidade não executará adequadamente.Usage Stats permission to do this. Please enable the permission for BOTH OF THE TWO Shelter apps shown in the dialog after you press \"Ok\". Failing to do so will cause this feature to not work properly. - Não pode iniciar aplicativo %s porque não tem GUI. - A clonagem de aplicativos para outro perfil não é atualmente possível no MIUI. Favor, clone a loja de aplicativos de seu sistema (por exemplo <b>Play Store</b>) no outro perfil e depois instale os aplicativos a partir daí.Play Store) into the other profile and then install apps from there. + Todos os apps na lista de \"Auto-Suspensão\" foram suspensos com sucesso. + Atalho criado no seu lançador. + O Shelter precisa de permissão de Estatísticas de uso para fazer isto. Por favor active a permissão para AMBOS os apps do Shelter que aparecerão no diálogo após de clicar no \"Ok\". Se isso não for feito, este recurso não funcionará corretamente. + Não podia iniciar o app %s porque não tem GUI. + A clonagem de apps não-do-sistema para outro perfil não é atualmente suportado no MIUI. Por favor, clone a loja de apps do seu sistema (p.ex. a Play Store) ao outro perfil e depois instale os apps a partir daí. Interação Tem que conceder permissão de administração do dispositivo para que Shelter funcione bem. Favor, tente de novo. - Aplicativo \"%s\" clonado com êxito + O app \"%s\" foi clonado com sucesso Abrir IU de Documentos Bloquear a Busca em Contatos Negar o acesso do perfil principal aos contatos dentro do perfil de trabalho. Traduzir - Relatório de Erros / Problemas - O Shelter precisa ter acesso a Todos os arquivos para poder usar o Traslado De Arquivos. Favor ativar a permissão para Ambos (Principal / Trabalho) aplicativos de Shelter que aparecerá no diálogo depois de pressionar \"Ok\". - O Shelter precisa Exibir sobre Outros Aplicativos para que o Traslado De Arquivos funcione corretamente. Favor ativar a permissão para Ambos (Principal / Trabalho) aplicativos de Shelter que aparecerá no diálogo depois de pressionar \"Ok\". Esta permissão é usada para iniciar os serviços de Traslado De Arquivos em segundo plano. - Continuar, sim + Relatório de Falhas / Problemas + O Shelter precisa ter acesso a Todos os arquivos para poder usar o Traslado de arquivos. Por favor ative a permissão para AMBOS (Pessoal / Trabalho) apps do Shelter que aparecerão no diálogo após de clicar no \"Ok\". + O Shelter precisa Exibir sobre outros apps para que o Traslado de arquivos funcione corretamente. Por favor ative a permissão para Ambos (Pessoal / Trabalho) apps do Shelter que aparecerão no diálogo após de clicar no \"Ok\". Esta permissão é usada para iniciar os serviços de Traslado de arquivos em segundo plano. + Sim, continuar + Bem-vindo ao Shelter + Detalhes sobre as permissões + Compatibilidade + Estamos prontos para configurar o Shelter para você. Por favor, certifique-se primeiro de que seu dispositivo não esteja no modo \"Não Perturbe\", porque mais tarde precisará clicar em uma notificação para finalizar o processo de configuração. +\n +\nQuando estiver pronto, clique em \"Próximo\" para iniciar o processo de configuração. + Por favor, aguarde… + A configuração falhou + Lamentamos informar que não foi possível configurar o Shelter para você. +\n +\nSe não cancelou a configuração manualmente, neste caso o motivo da falha é bem provável devido a um sistema excessivamente modificado, ou um conflito entre o Shelter e outros gerenciadores do Perfil de Trabalho. Infelizmente, não há muito que dá para fazer a respeito disso. +\n +\nClique em Próximo para sair. + Ação solicitada + Pronto\? + Estamos tentando disponibilizar o Perfil de Trabalho e configurar o Shelter no seu dispositivo. + O Shelter é um App que facilita executar outros apps em um perfil isolado. Para isto ele usa o recurso de Perfil de Trabalho do Android. +\n +\nClique no \"Próximo\", lá você verá mais informações sobre o Shelter, e o guia de como fazer o processo de configuração. +\n +\nSugerimos que você leia cuidadosamente todas as dicas a seguir. + Por padrão o Shelter não pedirá nenhuma permissão. Entretanto, uma vez que você prossiga com o processo de configuração, Shelter tentará configurar um Perfil de Trabalho e, portanto, se tornará o Gerenciador deste Perfil. +\n +\nIsto concederá ao Shelter uma ampla lista de permissões dentro do perfil, comparável a um Administrador de Dispositivo, embora confinado somente ao este perfil. Ser o gerenciador de perfil é necessário para realizar a maior parte das funcionalidades do Shelter. +\n +\nAlgumas funcionalidades avançadas do Shelter podem requerer mais permissões fora do perfil de trabalho. Quando for necessário o Shelter solicitará essas permissões separadamente para ativar as funcionalidades correspondentes. + O Shelter é desenvolvido e testado em ROMs tipo AOSP do Android. Isto inclui AOSP (Android Open Source Project), Android do Google (em Pixels), e a maioria de ROMs personalizados de software livre baseadas em AOSP como o LineageOS. Se seu telefone está rodando um dos derivativos do Android listados acima, então parabéns! O Shelter provavelmente vai funcionar corretamente no seu aparelho. +\n +\nAlguns fornecedores de dispositivos introduzem customizações no código do Android muito invasivas, resultando em conflitos, incompatibilidades e comportamentos inesperados. Alguns ROMs personalizados podem conter as alterações que causam incompatibilidades, mas geralmente essas ocorrências são muito raras em comparação com essas induzidas pelo vendedor do telefone. +\n +\nO Shelter é meramente uma interface para o recurso do Perfil de Trabalho fornecido pelo sistema. Se o recurso for quebrado ou não padrão, o Shelter não poderia resolver o problema por si mesmo. Se você estiver usando atualmente uma versão do Android modificada pelo fornecedor que é conhecida por quebrar os Perfis de Trabalho, você foi avisado. Pode proceder de qualquer forma, mas não há garantia de que o Shelter funcionará corretamente sob estas circunstâncias. + Agora você deve estar vendo uma notificação do Shelter. Por favor, clique nessa notificação para terminar o processo de configuração. +\n +\nSe você não vir a notificação, certifique-se de que seu dispositivo não está no modo \"Não Perturbe\" e tente recuperar a notificação deslizando de cima para baixo. +\n +\nPara resetar o Shelter e começar de novo, você pode limpar os dados em Configurações. \ No newline at end of file From d9c72be47a94308168e3b2eeb6e052bdca96b99f Mon Sep 17 00:00:00 2001 From: Random Date: Tue, 28 Sep 2021 13:49:02 +0000 Subject: [PATCH 161/355] Translated using Weblate (Italian) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/it/ --- app/src/main/res/values-it/strings.xml | 144 +++++++++++++++---------- 1 file changed, 90 insertions(+), 54 deletions(-) diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 428c4b7..bd4c17a 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -3,63 +3,63 @@ Ciao Continua Servizio di isolazione app - Shelter ha bisogno di diventare un Amministratore Dispositivo per riuscire nell\'isolamento delle app. + Shelter ha bisogno di diventare amministratore del dispositivo per eseguire l\'isolamento delle app. Scegli un\'immagine Notifiche importanti Premi qui per finire la configurazione di Shelter - Congratulazioni! Ti manca una sola pressione per finire la configurazione di Shelter. + Congratulazioni! Ti manca solo un passo per finire la configurazione di Shelter. Servizio Shelter - Shelter sta girando … - Blocco automatico in attesa - Segnala un bug / Controllo del problema - Blocca adesso + Shelter in esecuzione … + Congelamento automatico in attesa + Segnalazione di errori / Tracciatore dei problemi + Congela adesso Installazione... Pagina principale Shelter - Clona a Shelter (Profilo lavorativo) - Clona al Profilo principale + Clona in Shelter (Profilo di Lavoro) + Clona nel Profilo principale Disinstalla - Blocca - Sblocca - Lancia - Sblocca e Lancia - Auto-blocco - Permetti i Widgets nel Profilo principale + Congela + Scongela + Avvia + Scongela e avvia + Auto-congela + Permetti i widget nel profilo principale Cerca - Blocca il processo di background - Blocca + Congela in massa + Congela Mostra tutte le app Impostazioni - Apri Documenti + Apri interfaccia dei documenti Interazione - Lancia il file - Seleziona l\'immagine per la falsa Camera + Shuttle dei file + Seleziona l\'immagine per la falsa fotocamera Serve i permessi di Amministratore Dispositivo per far funzionare Shelter. Riprovare. Blocca la ricerca dei contatti - Blocca l\'accesso dal profilo principale ai contatti dentro il profilo lavorativo. + Impedisci l\'accesso dal profilo principale ai contatti dentro il profilo lavorativo. Servizi - Auto-blocca servizio - Quando lo schermo e\' bloccato, blocca automaticamente le app lanciate da \"Sblocca e Lancia il collegamento\". - Ritarda l\'auto-blocco - Tralascia le app in esecuzione + Servizio di auto-congelamento + Quando lo schermo è bloccato, congela automaticamente le app avviate da \"Scorciatoia scongela e avvia\". + Ritardo di auto-congelamento + Tralascia le app in primo piano Versione Codice sorgente Traduci Attendi mentre Shelter prepara il profilo per te … - Permesso negato o Dispositivo non supportato - Profilo lavorativo non trovato. Si prega di riavviare l\'app per ripescare il profilo. - Non e\' possibile ripescare il profilo lavorativo. Riprova riavviando Shelter. - L\'app \"%s\" clonata con successo - L\'app \"%s\" disinstallata con successo - L\'app \"%s\" bloccata con successo - L\'app \"%s\" sbloccata con successo - Non e\' possibile clonare le app di sistema su un profilo di cui Shelter non ha controllo. - Non e\' possibile aggiungere un collegamento. Si prega di contattare lo sviluppatore per maggiori informazioni(solo in inglese). + Autorizzazione negata o dispositivo non supportato + Profilo di lavoro non trovato. Si prega di riavviare l\'app per ricreare il profilo. + Non è possibile ricreare il profilo di lavoro. Riprova riavviando Shelter. + Applicazione \"%s\" clonata correttamente + App \"%s\" disinstallata correttamente + App \"%s\" congelata correttamente + App \"%s\" scongelata correttamente + Non è possibile clonare le app di sistema su un profilo di cui Shelter non ha controllo. + Non è possibile aggiungere una scorciatoia. Si prega di contattare lo sviluppatore per maggiori informazioni. Operazioni per %s - Tutte le app nella lista \"Auto-blocco\" sono state bloccate con successo. - Collegamento creato con successo. - Non e\' possibile lanciare l\'app %s perche\' non ha alcuna interfaccia utente. - Shelter ha bisogno del permesso di <b>Disegnare sopra le altre Applicazioni</b> per far funzionare Lancia File correttamente. Si prega di abilitare <b>ENTRAMBE</b> (Personale / Lavorativa) le app di Shelter mostrate nel dialogo dopo la pressione di \"Ok\". Questo permesso e\' usato per i servizi di background di Lancia File.Draw over Other Apps in order for File Shuttle to function correctly. Please enable the permission for BOTH OF THE TWO (Personal / Work) Shelter apps shown in the dialog after you press \"Ok\". This permission is used to start File Shuttle services in the background. + Tutte le app nella lista \"Auto-congela\" sono state congelate correttamente. + Scorciatoia creata correttamente nel launcher. + Non è possibile avviare l\'app %s perché non ha alcuna interfaccia utente. + Shelter ha bisogno di Disegnare sopra le altre applicazioni per far funzionare lo Shuttle dei file correttamente. Attiva ENTRAMBE le app di Shelter (Personale / Lavorativo) mostrate nella finestra dopo aver premuto \"Ok\". Questa autorizzazione è usata per avviare i servizi dello Shuttle dei file in secondo piano. Continua comunque Stai per configurare Shelter. \n @@ -70,22 +70,58 @@ \n(Se sei uno sviluppatore e ti piacerebbe rendere Shelter funzionante su ROM incompatibili come MIUI, il contrinuto al codice e\' benvenuto. Lo sviluppatore <b>NON SI ASSUME ALCUNA RESPONSABILITA\'</b> se si rompe il dispositivo che fa girare l\'app su ROM incompatibili.) \n \nC\'e\' bisogno di ricevere una notifica per finire la configurazione, assicurarsi che il dispositivo <b>NON</b> e\' in modalita Silenziosa.Work Profile feature of Android to isolate the apps. If you use a vendor / custom ROM that breaks related features (e.g. MIUI), you should now QUIT and DO NOT use this app.\n\nIf you choose to continue, Shelter will set up Work Profile for you.\n\nIf you are a developer and would like to make Shelter work on those incompatible ROMs like MIUI, pull requests are always welcome. The developer takes ABSOLUTELY NO RESPONSIBILITY if you break your device running an incompatible ROM.\n\nYou will need to receive a notification in order to finish setup, please make sure your device is NOT on Do Not Disturb mode. - Manipolare le app nascoste dalla lista puo\' causare crash e ogni tipo di comportamento inaspettato. Pero\' questa funzionalita\' puo\' essere utile quando il brand/ROM non abilita tutte le app predefinite necessarie per il buon funzionamento del profilo lavorativo. Se continui, ti assumi la responsabilita\' delle tue azioni. - Configurazione di Shelter completata. Adesso si sta riavviando Shelter. Se Shelter non si riapre automaticamento, rilanciarlo manualmente. - La clonazione delle app non di sistema su un\'altro profilo non e\' possibile su MIUI. Si prega di clonare il negozio delle app nell\'altro profilo e poi installarle da li\'. - Shelter blocchera\' in automatico le app lanciate da \"Sblocca e Lancia\" al prossimo blocco schermo. - Quando abilitato sarai capace di navigare/vedere/selezionare/copiare i file in Shelter dal profilo principale e vice-versa, SOLO tramite l\'interfaccia dei Documenti o le app con il supporto dell\'interfaccia dei Documenti, mantenendo al contempo l\'isolamento del sistema dei file. - Sembra che hai disabilitato la modalita\' lavorativa mentre lanciavi Shelter. Se lo abiliti adesso, si prega di riavviare Shelter. - [Frozen] %i - Non e\' possibile disinstallare le app di sistema in un profilo che Shelter non ha controllo. - Operazione in background - Crea un collegamento di Sblocco e/o Lancio - Crea un collegamento di blocco del processo di background - Presenta una falsa app per la Camera alle altre app, permettendoti di scegliere qualunque immagine dai Documenti(se Lancia File e\' abilitato) come se fosse un\'immagine scattata. + Manipolare le app nascoste dalla lista può causare crash e ogni tipo di comportamento inaspettato. Tuttavia, questa funzionalità può essere utile quando le ROM personalizzate in modo errato non attivano in modo predefinito tutte le app di sistema necessarie nel profilo lavorativo. Se continui, ti assumi la responsabilità delle tue azioni. + Configurazione di Shelter completata. Shelter verrà riavviato. Se Shelter non si avvia automaticamente, riaprilo a mano. + La clonazione di app non di sistema su un altro profilo attualmente non è possibile su MIUI. Si prega di clonare il negozio delle app (es. Play Store) nell\'altro profilo e poi installarle da lì. + Shelter congelerà automaticamente le app avviate da \"Scongela e avvia\" al prossimo blocco schermo. + Quando attivo, potrai sfogliare / vedere / selezionare / copiare i file in Shelter dal profilo principale e viceversa, SOLO tramite l\'interfaccia dei documenti (chiamata File o Documenti nel tuo launcher) o tramite le app con il supporto all\'interfaccia dei documenti (ottengono accesso solo temporaneo ai file che scegli), mantenendo al contempo l\'isolamento del filesystem. + Sembra che tu abbia disattivato la modalità lavorativa mentre avviavi Shelter. Se la attivi adesso, riavvia Shelter. + [Congelata] %s + Non è possibile disinstallare le app di sistema in un profilo di cui Shelter non ha controllo. + Operazione in massa + Crea una scorciatoia di scongelamento e/o avvio + Crea una scorciatoia di congelamento in massa + Presenta una falsa app per la fotocamera alle altre app, permettendoti di scegliere qualunque immagine dai documenti (e dallo Shuttle dei file se attivo) come se fosse una foto scattata. Ciò abilita lo Shuttle dei file per qualsiasi app che supporti l\'invocazione di altre app fotocamera per scattare una foto, anche se non supporta nativamente l\'interfaccia dei documenti. Installa l\'APK in Shelter - NON bloccare le app attive quando si blocca lo schermo. Questo puo\' essere utile per le app tipo lettori musicali, ma servira\' bloccarle manualmente dopo tramite \"Collegamento del blocco del processo di background\". - Shelter ha bisogno dei permessi di <b>Statistiche d\'uso</b> per farlo. Si prega di abilitare il permesso pee <b>ENTRAMBE</b> le app di Shelter mostrate nel dialogo dopo che premete \"Ok\". Altrimenti questa funzionalita\' non funzionera\' propriamente.Usage Stats permission to do this. Please enable the permission for BOTH OF THE TWO Shelter apps shown in the dialog after you press \"Ok\". Failing to do so will cause this feature to not work properly. - L\'installazione dell\'app nel profilo lavorativo e\' finita. - Sull\'app - Shelter ha bisogno dell\'accesso a <b>Tutti i file</b> per il Lancio File. Si prega di abilitare il permesso su <b>ENTRAMBE</b> (Personale / Lavorativo) le app di Shelter mostrate nel dialogo dopo che premete \"Ok\".All Files for File Shuttle. Please enable the permission for BOTH OF THE TWO (Personal / Work) Shelter apps shown in the dialog after you press \"Ok\". + NON congelare le app in primo piano (con attività visibile) quando si blocca lo schermo. Ciò può essere utile per app come i riproduttori musicali, ma poi dovrai congelarle a mano tramite \"Scorciatoia di congelamento in massa\". + Shelter ha bisogno dell\'autorizzazione Statistiche d\'uso per farlo. Attiva l\'autorizzazione per ENTRAMBE le app di Shelter mostrate nella finestra dopo aver premuto \"Ok\". Altrimenti questa funzione non funzionerà correttamente. + L\'installazione dell\'app nel profilo lavorativo è finita. + Al riguardo + Shelter ha bisogno dell\'accesso a Tutti i file per lo Shuttle dei file. Attiva l\'autorizzazione per ENTRAMBE le app di Shelter (Personale / Lavorativo) mostrate nella finestra dopo aver premuto \"Ok\". + Configurazione fallita + Azione richiesta + Shelter viene sviluppato e testato su derivate AOSP-like di Android . Ciò include AOSP (Android Open Source Project), Google Android (sui Pixel) e la maggior parte delle ROM open-source basate su AOSP come LineageOS. Se il tuo telefono utilizza una delle derivate di Android elencate sopra, congratulazioni! Shelter probabilmente funzionerà correttamente sul tuo dispositivo. +\n +\nAlcuni produttori di dispositivi introducono personalizzazioni molto invasive nel codice di Android, risultanti in conflitti, incompatibilità e comportamenti inattesi. Anche alcune ROM personalizzate possono introdurre modifiche che intaccano la compatibilità, ma generalmente sono casi più rari a confronto di quelle introdotte dai produttori di telefoni. +\n +\nShelter è una mera interfaccia per la funzione Profilo di Lavoro fornita dal sistema. Se la funzione fornita dal sistema è malfunzionante o non-standard, Shelter non può risolvere magicamente il problema da solo. Se stai usando una versione di Android modificata dal produttore nota per rovinare i Profili di Lavoro, sei stato avvisato. Puoi comunque proseguire, ma non c\'è alcuna garanzia che Shelter si comporti correttamente in queste circostanze. + Ci spiace informarti che non siamo stati in grado di configurare Shelter per te. +\n +\nSe non hai annullato la configurazione a mano, allora il motivo dell\'errore solitamente è a causa di un sistema pesantemente modificato, o di un conflitto tra Shelter e altri gestori del Profilo di Lavoro. Sfortunatamente, non c\'è molto che possiamo fare. +\n +\nClicca Avanti per uscire. + Ora dovresti vedere una notifica da Shelter. Clicca quella notifica per completare il processo di configurazione. +\n +\nSe non la vedi, assicurati che il dispositivo non sia in modalità Non Disturbare e prova a tirare giù il centro delle notifiche. +\n +\nPre ripristinare Shelter e ricominciare, puoi cancellare i dati di Shelter nelle impostazioni. + Siamo pronti per configurare Shelter per te. Prima assicurati che il dispositivo non sia in modalità Non Disturbare, poiché tra poco dovrai cliccare una notifica per finalizzare il processo di configurazione. +\n +\nQuando è tutto pronto, clicca \"Avanti\" per iniziare la configurazione. + Benvenuti in Shelter + Una parola in merito alle autorizzazioni + Compatibilità + Iniziamo\? + Attendere prego… + Stiamo provando a inizializzare il Profilo di Lavoro e configurare Shelter sul tuo dispositivo. + Shelter è un\'app che ti permette di usare altre applicazioni in un profilo isolato. Tutto questo viene fatto sfruttando la funzione Profilo di Lavoro di Android. +\n +\nClicca \"Avanti\" e ti daremo più informazioni riguardo Shelter, oltre a guidarti nel processo di configurazione. +\n +\nTi consigliamo di leggere attentamente tutte le pagine seguenti. + Shelter non chiederà alcuna autorizzazione in modo predefinito. Tuttavia, andando avanti con il processo di configurazione, Shelter proverà a creare un Profilo di Lavoro e di conseguenza a diventarne l\'amministratore. +\n +\nCiò darà a Shelter numerose autorizzazioni all\'interno del profilo, comparabili a quelle di un admin di dispositivo, ma pur sempre confinate nel profilo. Essere l\'amministratore del profilo è necessario perché Shelter funzioni correttamente. +\n +\nAlcune funzioni avanzate di Shelter potrebbero richiedere più autorizzazioni fuori dal Profilo di Lavoro. Se necessarie, Shelter le richiederà separatamente quando attivi le funzioni corrispondenti. \ No newline at end of file From 8b11d091e84dc6354eed6ac0d0d81ce5d20b331f Mon Sep 17 00:00:00 2001 From: Alice Date: Mon, 4 Oct 2021 14:30:45 +0000 Subject: [PATCH 162/355] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/zh_Hant/ --- app/src/main/res/values-zh-rTW/strings.xml | 36 ++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index a9c60e5..d6fada3 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -88,4 +88,40 @@ 創建批次凍結的捷徑 封鎖聯絡人搜尋 阻止主帳戶中的應用程式存取工作資料夾中的連絡人。 + 歡迎來到 Shelter + Shelter 可以幫助你隔離某些應用程式,透過使用 Work Profile 來創建一個新profile, 與你現正使用的profile是隔絕的。 +\n +\n如欲了解詳情並開始準備安裝,請按\"Next\"。 +\n +\n請小心留意下幾頁的須知。 + Shelter 本身不會要求權限,但創建Work Profile 後,會成為Work Profile 的管理員。 +\n +\nShelter 將會在Work Profile 內取得相當於管理員的權限,為了令Shelter 正常運作,這些權限是必須的。 +\n +\n某些先進功能或需要在Work Profile 外徵求額外權限。如有需要,Shelter 將會在您開啟該功能時,邀請你提供該權限。 + Shelter 為基於Android Open Source Project (AOSP) 的Android 作業系統而設,包括Google 版本 (Pixel 系列)的Android, 及大部數基於AOSP 的開源作業系統,如LineageOS, Calyx OS等。如果你使用上述作業系統,Shelter 很大機會可以正常運作。 +\n +\n某些公司會大幅修改 Android, 可能會導致不兼容,衝突,或其他未知反應。間中,某些作業系統亦會作出一些導致不兼容的變化。 +\n +\nShelter 僅提供創建Work Profile 的版面, 並不能解決非標準或有問題的軟件或硬件。如果你的Android 版本不符合上述描述, 請注意:你可以安全地使用Shelter, 但Shelter 未必可以正常運作。 + Shelter 已經發出了一則通知。請按該通知以完成設置。 +\n +\n如果該通知沒有出現,請確保電話現在沒有使用勿擾模式,並再次檢查所有通知。 +\n +\n欲重設Shelter,可以去電話設定清除Shelter 的數據。 + 關於Shelter 所需的權限 + 兼容性 + 設置失敗 + Shelter 正在啟動 Work Profile。 + 請稍候… + 準備好未? + 請確保電話現在沒有使用勿擾模式,以容許一則通知出現,以作完成設置Shelter。請按該則通知。 +\n +\n完成後,請按下頁。 + 遺憾地,Shelter 未能正常運作。 +\n +\n如果您沒有取消設定Work Profile,失敗原因可能是因為電話的作業系統與AOSP 分別太大,或者其他Work Profile管理員與Shelter 不兼容。很抱歉,Shelter 對此無能為力。 +\n +\n按Next 離開。 + 需要你的輸入 \ No newline at end of file From a5fdd50a05b1134c11248a2131e6301d5f72dda1 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 14 Oct 2021 10:55:34 -0400 Subject: [PATCH 163/355] .gitmodules: update path to SetupWizardLibrary --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 899467b..8bf645a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "libs/SetupWizardLibrary"] path = libs/SetupWizardLibrary - url = https://cgit.typeblog.net/SetupWizardLibrary.git + url = https://gitea.angry.im/PeterCxy/SetupWizardLibrary.git branch = android11-dev From 82c8caf027a2899f8ac84e5ff08c619a906d92c0 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 14 Oct 2021 14:54:26 -0400 Subject: [PATCH 164/355] Revert "Translated using Weblate (Chinese (Simplified))" This reverts commit e72e5e3e4c6ea7f562ed4b1d8a5b957d86a22fea. Please do NOT update the zh_CN translation. These are maintained by me, and acts as one of the canonical sources of translation (the other one being en_US). --- app/src/main/res/values-zh-rCN/strings.xml | 68 +++++----------------- 1 file changed, 16 insertions(+), 52 deletions(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 27605d6..abd5c6a 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -13,7 +13,7 @@ Shelter 服务 Shelter 正在运行 … 自动冻结等待中 - Shelter 将会在您下次锁屏时自动冻结使用 \"解冻并运行\" 启动的应用。 + Shelter 将会在您下次锁屏时自动冻结使用 \"解冻并运行\" 启动的应用 立刻冻结 主用户 @@ -37,7 +37,7 @@ 创建批量冻结快捷方式 冻结 安装 APK 到 Shelter - 已成功在工作用户内安装 APK。 + 已成功在工作用户内安装 APK 显示全部应用 对列表中默认隐藏的应用执行操作可能导致崩溃以及其他各种无法预料的行为。但是,当您的手机厂商没有正确在工作用户中开启所有必要的系统组件应用的时候,这个功能可以帮助您解决问题。如果您选择继续,您确保您了解您在做什么,Shelter 无法提供任何保证。 打开文件管理器 @@ -50,7 +50,7 @@ 向其他 App 提供一个伪装的相机 App,允许您从 Documents UI (包括 "文件穿梭" 功能) 选择任意文件作为 "拍摄结果"。这将使您能够在任何支持调用系统相机的 App 中选择来自 "文件穿梭" 的文件,无论 App 本身是否支持 Documents UI。 服务 自动冻结服务 - 在您锁屏时,自动冻结您通过 \"解冻并运行\" 启动的应用。 + 在您锁屏时,自动冻结您通过 \"解冻并运行\" 启动的应用 冻结延时 跳过前台应用 在您锁屏的时候,不要冻结前台应用 (锁屏时仍有可见窗口的应用)。这主要用于音乐播放器等 App,但您将需要在使用完成后手动使用 \"批量冻结\" 快捷方式冻结它们。 @@ -61,66 +61,30 @@ Shelter 必须拥有设备管理员权限以正常工作,请再试一次 正在为您准备 Shelter, 请稍候 … - Shelter 已初始化完成,正在启动 Shelter。如果 Shelter 没有自动启动,请您从启动器手动启动它。 + Shelter 已初始化完成,正在启动 Shelter。如果 Shelter 没有自动启动,请您从启动器手动启动它 权限不足 / 设备不兼容 - 工作用户不可用,请重新启动 Shelter 以重新初始化。 - 无法创建工作用户,您可以重启 Shelter 并再试一次。 - 工作模式 (Work Mode) 已被您关闭,请开启后再启动 Shelter。 + 工作用户不可用,请重新启动 Shelter 以重新初始化 + 无法创建工作用户,您可以重启 Shelter 并再试一次 + 工作模式 (Work Mode) 已被您关闭,请开启后再启动 Shelter 应用 \"%s\" 克隆成功 应用 \"%s\" 卸载成功 应用 \"%s\" 冻结成功 应用 \"%s\" 解冻成功 - 无法将系统应用克隆到 Shelter 无权管理的用户下。 - 无法在 Shelter 无权管理的用户下卸载系统应用。 - 无法在您的启动器上添加快捷方式,请联系开发者获得更多信息。 + 无法将系统应用克隆到 Shelter 无权管理的用户下 + 无法在 Shelter 无权管理的用户下卸载系统应用 + 无法在您的启动器上添加快捷方式,请联系开发者 %s 可用操作 - 所有在 \"自动冻结\" 列表中的应用都已经成功冻结。 - 快捷方式已创建。 - Shelter需要使用统计权限来做这个。请在点按「确定」后出现的窗口中为两个 Shelter 应用程式均授予此权限,如果没有授权会导致此功能无法正常运作。 - 无法启动没有用户界面的应用 %s。 + 所有在 \"自动冻结\" 列表中的应用都已经冻结成功 + 快捷方式已创建 + Shelter 需要 使用情况数据 来做这件事。请在按 \"确定\" 后出现的窗口中,对 两个 Shelter 打开此权限。如果没有全部打开,该功能将无法正确运作。 + 无法启动没有用户界面的应用 %s - 在MIUI上,克隆非系统应用程序到另一个配置文件目前是不可能的。请将您的系统应用商店(如Play Store)克隆到其他配置文件,然后从那里安装应用。 + 目前无法在 MIUI 上克隆非系统应用。请先克隆您的系统应用商店 (如 Play Store) 然后从克隆的应用商店中安装应用 无视并继续 正在安装…… File Shuttle 需要访问 全部文件 的权限。请在接下来的对话框中对 两个 Shelter (工作用户内 / 外) 都启用该权限。 File Shuttle 需要 悬浮窗 权限才能在 Shelter 不在运行时正常启动。请在接下来的对话框中对 两个 Shelter (工作用户内 / 外) 都打开该权限。 翻译 阻止访问联系人 - 阻止主用户中的应用访问工作用户的联系人资料。 - 欢迎来到Shelter - 关于权限的说明 - 兼容性 - 准备好? - 我们现在已准备好为您设置 Shelter。 请首先确保您的设备是 不是 请勿打扰模式,因为您需要 点击通知 稍后完成设置过程。 -\n -\n准备好后,单击“下一步”开始设置过程。 - 请稍等… - 我们正在尝试初始化工作档案并在您的设备上设置 Shelter。 - 安装失败 - 我们很遗憾地通知您,我们无法为您设置Shelter。 -\n -\n如果您没有手动取消设置,那么失败的最常见原因是系统被大量修改,或者 Shelter 与其他工作配置文件管理器之间存在冲突。 不幸的是,我们对此无能为力。 -\n -\n单击下一步退出。 - 需要采取的行动 - 您现在应该会看到来自 Shelter 的通知。 请点击该通知 完成设置过程。 -\n -\n如果您没有看到通知,请确保您的设备未处于“请勿打扰”模式并尝试下拉通知中心。 -\n -\n要重置 Shelter 并重新开始,您可以在设置中清除 Shelter 的数据。 - Shelter是一个帮助你在一个独立的配置文件中运行其他应用程序的应用程序。它通过利用Android的工作档案功能来实现。 -\n -\n点击 \"下一步\",我们将向你提供更多关于Shelter的信息,并指导你完成设置过程。 -\n -\n我们建议你仔细阅读以下所有的页面。 - 默认情况下,Shelter不会要求任何个人权限。然而,一旦你继续进行设置过程,Shelter将尝试设置一个工作档案,并成为此档案的档案管理员。 -\n -\n这将授予Shelter在配置文件内的大量权限,与设备管理员的权限相当,尽管只限于配置文件内。为了实现Shelter的大部分功能成为档案管理员是必要的。 -\n -\nShelter 的一些高级功能可能需要更多权限外部工作资料。当需要时,Shelter将在你启用相应的功能时单独要求这些权限。 - Shelter是在类似AOSP的安卓衍生品上开发和测试的。这包括AOSP(安卓开源项目),谷歌安卓(在Pixels上),以及大多数基于AOSP的开源定制ROM,如LineageOS。如果你的手机正在运行上面列出的安卓衍生品之一,那么恭喜你!Shelter可能会正常工作。Shelter可能会在你的设备上正确工作。 -\n -\n一些设备供应商在安卓代码库中引入了非常具有侵略性的定制,导致冲突、不兼容和意外行为。一些定制的ROM也会引入破坏兼容性的变化,但一般来说,与手机供应商引入的不兼容问题相比,这些情况更少发生。 -\n -\nSheler只是一个进入系统所提供的工作档案功能的接口。如果系统提供的功能是坏的或不标准的,Shelter不可能自己神奇地解决这个问题。如果你目前使用的是供应商修改过的Android版本,而该版本已知会破坏工作档案,你已经被警告了。你可以继续进行,但不能保证Shelter在这些情况下的行为是正常的。 + 阻止主用户中的应用访问工作用户的联系人资料 \ No newline at end of file From a8cf77857b446035d989b1e99c9eae655660dddd Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 14 Oct 2021 17:20:42 -0400 Subject: [PATCH 165/355] update gradle build tools version --- .idea/compiler.xml | 2 +- .idea/misc.xml | 3 ++- .idea/runConfigurations.xml | 12 ------------ app/build.gradle | 3 --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 6 files changed, 5 insertions(+), 19 deletions(-) delete mode 100644 .idea/runConfigurations.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 61a9130..fb7f4a8 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index cc51e58..cc5f875 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,5 +1,6 @@ + - + diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml deleted file mode 100644 index 7f68460..0000000 --- a/.idea/runConfigurations.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 040babc..d32c171 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,9 +18,6 @@ android { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } - aaptOptions { - cruncherEnabled = false - } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 diff --git a/build.gradle b/build.gradle index 98518ee..193e697 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:4.1.2' + classpath 'com.android.tools.build:gradle:7.0.2' // NOTE: Do not place your application dependencies here; they belong diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e48320d..34b93c1 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip From 0ae375e6a33a69bf6e9ede609972d939f8d7e446 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 14 Oct 2021 18:08:59 -0400 Subject: [PATCH 166/355] bump Android build tools version and dependencies --- .idea/deploymentTargetDropDown.xml | 17 +++++++++++++++++ app/build.gradle | 18 +++++++++--------- 2 files changed, 26 insertions(+), 9 deletions(-) create mode 100644 .idea/deploymentTargetDropDown.xml diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml new file mode 100644 index 0000000..0b8f803 --- /dev/null +++ b/.idea/deploymentTargetDropDown.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index d32c171..05a8780 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,8 +1,8 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 30 - buildToolsVersion '30.0.2' + compileSdkVersion 31 + buildToolsVersion '30.0.3' defaultConfig { applicationId "net.typeblog.shelter" minSdkVersion 24 @@ -38,16 +38,16 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.legacy:legacy-support-core-ui:1.0.0' - implementation 'androidx.fragment:fragment:1.3.1' - implementation 'androidx.appcompat:appcompat:1.3.0-beta01' + implementation 'androidx.fragment:fragment:1.3.6' + implementation 'androidx.appcompat:appcompat:1.4.0-beta01' implementation 'androidx.preference:preference:1.1.1' - implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - implementation 'com.google.android.material:material:1.3.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.1' + implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0' implementation 'mobi.upod:time-duration-picker:1.1.3' debugImplementation project(path: ':setup-wizard-lib', configuration: 'gingerbreadCompatDebugRuntimeElements') releaseImplementation project(path: ':setup-wizard-lib', configuration: 'gingerbreadCompatReleaseRuntimeElements') - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.4.0-alpha04' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0-alpha04' + testImplementation 'junit:junit:4.13.2' + androidTestImplementation 'androidx.test:runner:1.4.1-alpha03' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0-alpha03' } From 35fc9ba1bd960fcf11b6b521b3d7bdcef2411255 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 14 Oct 2021 18:16:13 -0400 Subject: [PATCH 167/355] WIP: bump targetSdkVersion to 31 --- app/build.gradle | 2 +- app/src/main/AndroidManifest.xml | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 05a8780..4ca3a7e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,7 +6,7 @@ android { defaultConfig { applicationId "net.typeblog.shelter" minSdkVersion 24 - targetSdkVersion 30 + targetSdkVersion 31 versionCode 18 versionName "1.7-dev1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f17b6ff..a4b0c47 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -36,7 +36,8 @@ + android:launchMode="singleTask" + android:exported="true"> @@ -46,7 +47,8 @@ + android:launchMode="singleTask" + android:exported="false"/> + android:theme="@style/Theme.AppCompat.Translucent.NoTitleBar" + android:exported="true"> @@ -82,7 +85,8 @@ + android:label="@string/camera_proxy_activity" + android:exported="true"> @@ -93,7 +97,8 @@ + android:permission="android.permission.BIND_DEVICE_ADMIN" + android:exported="true"> From 24108822a22764a0df01ead2c88189fd4ea9f751 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 14 Oct 2021 18:28:14 -0400 Subject: [PATCH 168/355] ShelterDeviceAdminReceiver: remove FLAG_ONGOING_EVENT This prevents the notification from being shown on S --- .../shelter/receivers/ShelterDeviceAdminReceiver.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/net/typeblog/shelter/receivers/ShelterDeviceAdminReceiver.java b/app/src/main/java/net/typeblog/shelter/receivers/ShelterDeviceAdminReceiver.java index f251c64..bc39bda 100644 --- a/app/src/main/java/net/typeblog/shelter/receivers/ShelterDeviceAdminReceiver.java +++ b/app/src/main/java/net/typeblog/shelter/receivers/ShelterDeviceAdminReceiver.java @@ -30,8 +30,8 @@ public class ShelterDeviceAdminReceiver extends DeviceAdminReceiver { context.getString(R.string.finish_provision_desc), R.drawable.ic_notification_white_24dp); notification.contentIntent = PendingIntent.getActivity(context, 0, i, - PendingIntent.FLAG_UPDATE_CURRENT); - notification.flags |= Notification.FLAG_AUTO_CANCEL | Notification.FLAG_ONGOING_EVENT; + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); + notification.flags |= Notification.FLAG_AUTO_CANCEL; context.getSystemService(NotificationManager.class) .notify(NOTIFICATION_ID, notification); } From bd1c765fb0d03ec4d2baaf76e3611638484bdc50 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 14 Oct 2021 18:34:17 -0400 Subject: [PATCH 169/355] strings: fix typo --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ce950ec..665eb00 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -13,7 +13,7 @@ A word on permissions By default, Shelter will not ask for any individual permissions. However, once you proceed with the setup process, Shelter will try to set up a Work Profile and hence become the profile manager of said profile.\n\nThis will grant Shelter an extensive list of permissions inside the profile, comparable to that of a Device Admin, albeit confined to the profile. Being the profile manager is necessary for most of Shelter\'s functionality.\n\nSome advanced features of Shelter may require more permissions outside the Work Profile. When needed, Shelter will ask for those permissions separately when you enable the corresponding features. Compatibility - Shelter is developed and tested on AOSP-like Android derivatives. This includes AOSP (Android Open Source Project), Google Android (on Pixels), and most AOSP-based open-source custom ROMs such as LineageOS. If your phone is running one of the Android derivatives listed above, then congratulations! Shelter is probably going to work correctly on your device.\n\nSome device vendors introduce very invasive customizations into the Android code base, resulting in conflicts, incompatibility and unexpected behavior. Some custom ROMs can also introduce compatibility-breaking changes, but generally these are rarer occurrences compared to phone vendor-introduced incompatibilities.\n\nSheler is merely an interface into the Work Profile feature provided by the system. If the feature provided by the system is broken or non-standard, Shelter could not magically resolve the issue on its own. If you are currently using a vendor-modified Android version that is known to break Work Profiles, you have been warned. You may proceed anyway, but there is no guarantee that Shelter would behave correctly under these circumstances. + Shelter is developed and tested on AOSP-like Android derivatives. This includes AOSP (Android Open Source Project), Google Android (on Pixels), and most AOSP-based open-source custom ROMs such as LineageOS. If your phone is running one of the Android derivatives listed above, then congratulations! Shelter is probably going to work correctly on your device.\n\nSome device vendors introduce very invasive customizations into the Android code base, resulting in conflicts, incompatibility and unexpected behavior. Some custom ROMs can also introduce compatibility-breaking changes, but generally these are rarer occurrences compared to phone vendor-introduced incompatibilities.\n\nShelter is merely an interface into the Work Profile feature provided by the system. If the feature provided by the system is broken or non-standard, Shelter could not magically resolve the issue on its own. If you are currently using a vendor-modified Android version that is known to break Work Profiles, you have been warned. You may proceed anyway, but there is no guarantee that Shelter would behave correctly under these circumstances. Ready? We are now ready to set up Shelter for you. Please first ensure that your device is not in Do Not Disturb mode, because you will need to click on a notification later to finalize the setup process.\n\nWhen you are ready, click on \"Next\" to begin the setup process. Please wait… From d8fe3e339c34d3c7d78c6328c1df37966ebde0af Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 14 Oct 2021 18:37:57 -0400 Subject: [PATCH 170/355] strings: now setup will fail with existing profiles --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 665eb00..8ca4b6d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -19,7 +19,7 @@ Please wait… We are trying to initialize Work Profile and set up Shelter on your device. Setup failed - We regret to inform you that we were not able to set up Shelter for you.\n\nIf you did not cancel the setup manually, then the reason for the failure is most commonly due to a heavily modified system, or a conflict between Shelter and other Work Profile managers. Unfortunately, there is not much that we could do about this.\n\nClick "Next" to exit. + We regret to inform you that we were not able to set up Shelter for you.\n\nIf your device already had a Work Profile, either from a previous installation of Shelter or from another application, you will have to remove that profile in Settings -> Account before Shelter can proceed.\n\nOtherwise, if you did not cancel the setup manually, then the reason for the failure is most commonly due to a heavily modified system, or a conflict between Shelter and other Work Profile managers. Unfortunately, there is not much that we could do about this.\n\nClick "Next" to exit. Action required You should now be seeing a notification from Shelter. Please click on that notification to finish the setup process.\n\nIf you do not see the notification, make sure your device is not in Do Not Disturb mode and try pulling down the notification center.\n\nTo reset Shelter and start over, you can clear the data of Shelter in Settings. From a36e0284788c2b1a8e8ea8e8df68eeceb9fee4b6 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 14 Oct 2021 18:38:33 -0400 Subject: [PATCH 171/355] strings: escape quotes --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8ca4b6d..54963a6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -19,7 +19,7 @@ Please wait… We are trying to initialize Work Profile and set up Shelter on your device. Setup failed - We regret to inform you that we were not able to set up Shelter for you.\n\nIf your device already had a Work Profile, either from a previous installation of Shelter or from another application, you will have to remove that profile in Settings -> Account before Shelter can proceed.\n\nOtherwise, if you did not cancel the setup manually, then the reason for the failure is most commonly due to a heavily modified system, or a conflict between Shelter and other Work Profile managers. Unfortunately, there is not much that we could do about this.\n\nClick "Next" to exit. + We regret to inform you that we were not able to set up Shelter for you.\n\nIf your device already had a Work Profile, either from a previous installation of Shelter or from another application, you will have to remove that profile in Settings -> Account before Shelter can proceed.\n\nOtherwise, if you did not cancel the setup manually, then the reason for the failure is most commonly due to a heavily modified system, or a conflict between Shelter and other Work Profile managers. Unfortunately, there is not much that we could do about this.\n\nClick \"Next\" to exit. Action required You should now be seeing a notification from Shelter. Please click on that notification to finish the setup process.\n\nIf you do not see the notification, make sure your device is not in Do Not Disturb mode and try pulling down the notification center.\n\nTo reset Shelter and start over, you can clear the data of Shelter in Settings. From 1fd8670acbca6ea4db55d0bdfb36eea85ce13455 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 14 Oct 2021 20:16:16 -0400 Subject: [PATCH 172/355] DummyActivity: set FLAG_MUTABLE on pending intents Required on S --- app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java b/app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java index ddb5bf9..d8a4e91 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java @@ -339,7 +339,7 @@ public class DummyActivity extends Activity { Intent intent = new Intent(this, DummyActivity.class); intent.setAction(PACKAGEINSTALLER_CALLBACK); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, - intent, PendingIntent.FLAG_UPDATE_CURRENT); + intent, PendingIntent.FLAG_MUTABLE); session.commit(pendingIntent.getIntentSender()); }); } @@ -395,7 +395,7 @@ public class DummyActivity extends Activity { Intent intent = new Intent(this, DummyActivity.class); intent.setAction(PACKAGEINSTALLER_CALLBACK); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, - intent, PendingIntent.FLAG_UPDATE_CURRENT); + intent, PendingIntent.FLAG_MUTABLE); pi.uninstall(getIntent().getStringExtra("package"), pendingIntent.getIntentSender()); } From 2dd11d074feb1077a151451e89b1f79994ee1aa4 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 14 Oct 2021 20:23:33 -0400 Subject: [PATCH 173/355] fix more instances of PendingIntent --- .../main/java/net/typeblog/shelter/services/FreezeService.java | 2 +- app/src/main/java/net/typeblog/shelter/util/Utility.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/net/typeblog/shelter/services/FreezeService.java b/app/src/main/java/net/typeblog/shelter/services/FreezeService.java index 5d7502e..daf90fa 100644 --- a/app/src/main/java/net/typeblog/shelter/services/FreezeService.java +++ b/app/src/main/java/net/typeblog/shelter/services/FreezeService.java @@ -163,7 +163,7 @@ public class FreezeService extends Service { notification.actions = new Notification.Action[] { new Notification.Action.Builder( null, getString(R.string.service_auto_freeze_now), - PendingIntent.getActivity(this, 0, intentFreeze, 0) + PendingIntent.getActivity(this, 0, intentFreeze, PendingIntent.FLAG_IMMUTABLE) ).build() }; diff --git a/app/src/main/java/net/typeblog/shelter/util/Utility.java b/app/src/main/java/net/typeblog/shelter/util/Utility.java index f5f5686..d3e3eca 100644 --- a/app/src/main/java/net/typeblog/shelter/util/Utility.java +++ b/app/src/main/java/net/typeblog/shelter/util/Utility.java @@ -316,7 +316,7 @@ public class Utility { .build(); Intent addIntent = shortcutManager.createShortcutResultIntent(info); shortcutManager.requestPinShortcut(info, - PendingIntent.getBroadcast(context, 0, addIntent, 0).getIntentSender()); + PendingIntent.getBroadcast(context, 0, addIntent, PendingIntent.FLAG_IMMUTABLE).getIntentSender()); } else { // TODO: Maybe implement this for launchers without pin shortcut support? // TODO: Should be the same with the fallback for Android < O From 82681c3452338f21432d36ca8637d02916214721 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 20 Oct 2021 21:55:14 -0400 Subject: [PATCH 174/355] bump version to 1.7-dev2 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4ca3a7e..6256c09 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "net.typeblog.shelter" minSdkVersion 24 targetSdkVersion 31 - versionCode 18 - versionName "1.7-dev1" + versionCode 19 + versionName "1.7-dev2" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { From 13748b77451b792dee8d51a976ea4cc47b1c6be6 Mon Sep 17 00:00:00 2001 From: ling Date: Sun, 24 Oct 2021 11:08:30 +0000 Subject: [PATCH 175/355] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/zh_Hans/ --- app/src/main/res/values-zh-rCN/strings.xml | 70 +++++++++++++++++----- 1 file changed, 54 insertions(+), 16 deletions(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index abd5c6a..24a174b 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -13,7 +13,7 @@ Shelter 服务 Shelter 正在运行 … 自动冻结等待中 - Shelter 将会在您下次锁屏时自动冻结使用 \"解冻并运行\" 启动的应用 + Shelter 将会在您下次锁屏时自动冻结使用 \"解冻并运行\" 启动的应用。 立刻冻结 主用户 @@ -37,7 +37,7 @@ 创建批量冻结快捷方式 冻结 安装 APK 到 Shelter - 已成功在工作用户内安装 APK + 已成功在工作用户内安装 APK。 显示全部应用 对列表中默认隐藏的应用执行操作可能导致崩溃以及其他各种无法预料的行为。但是,当您的手机厂商没有正确在工作用户中开启所有必要的系统组件应用的时候,这个功能可以帮助您解决问题。如果您选择继续,您确保您了解您在做什么,Shelter 无法提供任何保证。 打开文件管理器 @@ -50,7 +50,7 @@ 向其他 App 提供一个伪装的相机 App,允许您从 Documents UI (包括 "文件穿梭" 功能) 选择任意文件作为 "拍摄结果"。这将使您能够在任何支持调用系统相机的 App 中选择来自 "文件穿梭" 的文件,无论 App 本身是否支持 Documents UI。 服务 自动冻结服务 - 在您锁屏时,自动冻结您通过 \"解冻并运行\" 启动的应用 + 在您锁屏时,自动冻结您通过 \"解冻并运行\" 启动的应用。 冻结延时 跳过前台应用 在您锁屏的时候,不要冻结前台应用 (锁屏时仍有可见窗口的应用)。这主要用于音乐播放器等 App,但您将需要在使用完成后手动使用 \"批量冻结\" 快捷方式冻结它们。 @@ -61,30 +61,68 @@ Shelter 必须拥有设备管理员权限以正常工作,请再试一次 正在为您准备 Shelter, 请稍候 … - Shelter 已初始化完成,正在启动 Shelter。如果 Shelter 没有自动启动,请您从启动器手动启动它 + Shelter 已初始化完成,正在启动 Shelter。如果 Shelter 没有自动启动,请您从启动器手动启动它。 权限不足 / 设备不兼容 - 工作用户不可用,请重新启动 Shelter 以重新初始化 - 无法创建工作用户,您可以重启 Shelter 并再试一次 - 工作模式 (Work Mode) 已被您关闭,请开启后再启动 Shelter + 工作用户不可用,请重新启动 Shelter 以重新初始化。 + 无法创建工作用户,您可以重启 Shelter 并再试一次。 + 工作模式 (Work Mode) 已被您关闭,请开启后再启动 Shelter。 应用 \"%s\" 克隆成功 应用 \"%s\" 卸载成功 应用 \"%s\" 冻结成功 应用 \"%s\" 解冻成功 - 无法将系统应用克隆到 Shelter 无权管理的用户下 - 无法在 Shelter 无权管理的用户下卸载系统应用 - 无法在您的启动器上添加快捷方式,请联系开发者 + 无法将系统应用克隆到 Shelter 无权管理的用户下。 + 无法在 Shelter 无权管理的用户中卸载系统应用。 + 无法在您的启动器上添加快捷方式,请联系开发者。 %s 可用操作 - 所有在 \"自动冻结\" 列表中的应用都已经冻结成功 - 快捷方式已创建 - Shelter 需要 使用情况数据 来做这件事。请在按 \"确定\" 后出现的窗口中,对 两个 Shelter 打开此权限。如果没有全部打开,该功能将无法正确运作。 - 无法启动没有用户界面的应用 %s + 所有在 \"自动冻结\" 列表中的应用都已经冻结成功。 + 快捷方式已创建。 + Shelter 需要 使用情况数据 来做这件事。请在按 \"确定\" 后出现的窗口中,对 两个 Shelter都打开此权限。如果没有全部打开,该功能将无法正确运作。 + 无法启动没有用户界面的应用 %s。 - 目前无法在 MIUI 上克隆非系统应用。请先克隆您的系统应用商店 (如 Play Store) 然后从克隆的应用商店中安装应用 + 目前无法在 MIUI 上克隆非系统应用。请先克隆您的系统应用商店 (如 Play Store) 然后从克隆的应用商店中安装应用。 无视并继续 正在安装…… File Shuttle 需要访问 全部文件 的权限。请在接下来的对话框中对 两个 Shelter (工作用户内 / 外) 都启用该权限。 File Shuttle 需要 悬浮窗 权限才能在 Shelter 不在运行时正常启动。请在接下来的对话框中对 两个 Shelter (工作用户内 / 外) 都打开该权限。 翻译 阻止访问联系人 - 阻止主用户中的应用访问工作用户的联系人资料 + 阻止主用户中的应用访问工作用户的联系人资料。 + 欢迎来到Shelter + 关于权限的说明 + 请稍等… + 我们正在尝试初始化工作档案并在您的设备上设置 Shelter。 + 安装失败 + 需要采取的行动 + 我们现在已准备好为您设置 Shelter。 请首先确保您的设备是 不是 请勿打扰模式,因为您需要 点击通知 稍后完成设置过程。 +\n +\n准备好后,单击“下一步”开始设置过程。 + 兼容性 + 准备好? + 默认情况下,Shelter不会要求任何个人权限。然而,一旦你继续进行设置过程,Shelter将尝试设置一个工作档案,并成为此档案的档案管理员。 +\n +\n这将授予Shelter在配置文件内的大量权限,与设备管理员的权限相当,尽管只限于配置文件内。为了实现Shelter的大部分功能成为档案管理员是必要的。 +\n +\nShelter 的一些高级功能可能需要更多权限外部工作资料。当需要时,Shelter将在你启用相应的功能时单独要求这些权限。 + 我们很遗憾地通知您,我们无法为您设置Shelter。 +\n +\n如果您的设备已经有工作配置文件,无论是之前安装的Shelter所创建或者其他应用程序创建,您都必须在设置 -> 帐户中删除该配置文件,然后 Shelter 才能继续。 +\n +\n如果您没有手动取消设置,那么失败的最常见原因是系统被大量修改,或者 Shelter 与其他工作配置文件管理器之间存在冲突。 不幸的是,我们对此无能为力。 +\n +\n单击下一步退出。 + Shelter是在类似AOSP的安卓衍生品上开发和测试的。这包括AOSP(安卓开源项目),谷歌安卓(在Pixels上),以及大多数基于AOSP的开源定制ROM,如LineageOS。如果你的手机正在运行上面列出的安卓衍生品之一,那么恭喜你!Shelter可能会正常工作。 +\n +\nShelter可能会在你的设备上正确工作。 一些设备供应商在安卓代码库中引入了非常具有侵略性的定制,导致冲突、不兼容和意外行为。一些定制的ROM也会引入破坏兼容性的变化,但一般来说,与手机供应商引入的不兼容问题相比,这些情况更少发生。 +\n +\nSheler只是一个进入系统所提供的工作档案功能的接口。如果系统提供的功能是坏的或不标准的,Shelter不可能自己神奇地解决这个问题。如果你目前使用的是供应商修改过的Android版本,而该版本已知会破坏工作档案,你已经被警告了。你可以继续进行,但不能保证Shelter在这些情况下的行为是正常的。 + Shelter是一个帮助你在一个独立的配置文件中运行其他应用程序的应用程序。它通过利用Android的工作档案功能来实现。 +\n +\n点击 \"下一步\",我们将向你提供更多关于Shelter的信息,并指导你完成设置过程。 +\n +\n我们建议你仔细阅读以下所有的页面。 + 您现在应该会看到来自 Shelter 的通知。 请点击该通知 完成设置过程。 +\n +\n如果您没有看到通知,请确保您的设备未处于“请勿打扰”模式并尝试下拉通知中心。 +\n +\n要重置 Shelter 并重新开始,您可以在设置中清除 Shelter 的数据。 \ No newline at end of file From 55142a7e4a6c96ba5107ad3d2f11e093f50637fa Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 29 Oct 2021 14:26:07 -0400 Subject: [PATCH 176/355] chore: bump Android gradle plugin version --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 193e697..42810d6 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:7.0.2' + classpath 'com.android.tools.build:gradle:7.0.3' // NOTE: Do not place your application dependencies here; they belong From e42819a7e7b2ec3d07a77a9b5ad8eef9c67e5874 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 29 Oct 2021 14:26:32 -0400 Subject: [PATCH 177/355] chore: bump dependencies --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 6256c09..c191e3a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -39,7 +39,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.legacy:legacy-support-core-ui:1.0.0' implementation 'androidx.fragment:fragment:1.3.6' - implementation 'androidx.appcompat:appcompat:1.4.0-beta01' + implementation 'androidx.appcompat:appcompat:1.4.0-rc01' implementation 'androidx.preference:preference:1.1.1' implementation 'androidx.constraintlayout:constraintlayout:2.1.1' implementation 'com.google.android.material:material:1.4.0' From 802074ee796cfcc0de77d4de9c175a6058586109 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 29 Oct 2021 14:27:23 -0400 Subject: [PATCH 178/355] res: update source code URL to gitea --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 54963a6..100d18d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -81,7 +81,7 @@ About Version Source Code - https://cgit.typeblog.net/Shelter + https://gitea.angry.im/PeterCxy/Shelter Translate https://weblate.typeblog.net/projects/shelter/shelter/ Bug Report / Issue Tracker From 4bf4816521d9be905233bf090e29fa05cc57c017 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 29 Oct 2021 14:37:27 -0400 Subject: [PATCH 179/355] AndroidManifest: get rid of annoying linter warnings --- app/src/main/AndroidManifest.xml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a4b0c47..2c0e61e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ @@ -12,11 +13,13 @@ - + - + From a32f344736842b824c92d369de3ed0a15209a87e Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 29 Oct 2021 17:11:55 -0400 Subject: [PATCH 180/355] CHANGELOG: Update changelog in preparation for 1.7 release --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f6d69b..b21c796 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,10 @@ -Unreleased +1.7 === - Revamped the initial setup process to include a full setup guide for better clarity and less confusion. +- Upgraded targetSDK to 31 (Android 12) with compatibility fixes. +- Upgraded dependencies. +- Translation updates thanks to our wonderful community. 1.6 === From 12cb10521fb85dc3fbec182aa3b2d8764b4f882f Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 29 Oct 2021 17:12:26 -0400 Subject: [PATCH 181/355] app: bump version to 1.7 (20) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index c191e3a..590352b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "net.typeblog.shelter" minSdkVersion 24 targetSdkVersion 31 - versionCode 19 - versionName "1.7-dev2" + versionCode 20 + versionName "1.7" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { From ad7c2050b2bf95fa99b2b6321efa4f90605e5dad Mon Sep 17 00:00:00 2001 From: Faysal E Date: Thu, 4 Nov 2021 21:56:46 +0000 Subject: [PATCH 182/355] Translated using Weblate (Arabic) Currently translated at 73.4% (72 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/ar/ --- app/src/main/res/values-ar/strings.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 124a300..79093e7 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -6,7 +6,7 @@ خدمة عزل التطبيقات يحتاج العازل إلى أن يصبح مسؤول الجهاز من أجل تنفيذ مهام العزل الخاصة به. خدمة العزل - العازل يعمل الآن … + العازل يعمل الآن … الرئيسيه العازل %s [مجمد] @@ -28,7 +28,7 @@ كود المصدر الإبلاغ عن الأخطاء / تتبع المشاكل يجب منح إذن إدارة الجهاز لالعازل للعمل. حاول مرة اخرى. - …الرجاء الانتظار بينما نقوم بإعداد ملف عمل العازل لك + …الرجاء الانتظار بينما نقوم بإعداد ملف عمل العازل لك اكتمل إعداد العازل. جاري إعادة تشغيل العازل الآن. إذا لم يبدأ العازل تلقائيًا ، يمكنك بدءه مرة أخرى. تم رفض الإذن أو جهاز غير مدعوم لم يتم العثور على ملف العمل. يرجى إعادة تشغيل التطبيق لإعادة توفير الملف الشخصي. @@ -67,4 +67,6 @@ إظهار كل التطبيقات قد يتسبب التلاعب بالتطبيقات المخفية من القائمة في حدوث أعطال وكل أنواع السلوك غير المتوقع. على الرغم من ذلك ، يمكن أن تكون هذه الميزة مفيدة عندما لا يقوم ROM المخصص بتمكين جميع تطبيقات النظام الضرورية في الملف العمل بشكل افتراضي. إذا تابعت ، فهذا علي مسؤليتك الخاصه. تأخير التجميد التلقائي + فشل التثبيت + تثبيت... \ No newline at end of file From ae6096613dfcd506e61e2ff0af2dc35b54128be6 Mon Sep 17 00:00:00 2001 From: Alparslan Sakci Date: Wed, 10 Nov 2021 14:44:41 +0000 Subject: [PATCH 183/355] Translated using Weblate (Turkish) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/tr/ --- app/src/main/res/values-tr/strings.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 0e70ba9..dd69a23 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -87,9 +87,11 @@ \nTüm bilgileri dikkatlice okumanızı tavsiye ederiz. Üzgünüz, Shelter kurulumu başarısız. \n -\nEğer kurulumu iptal etmediyseniz, kurulumun başarısız olmasının sebebi yüksek ihtimalle Shelter ile başka bir İş Profili yöneticisinin çakışması veya sisteminizin büyük ölçüde değiştirilmiş olmasıdır. Shelter bu tip sorunları maalesef kendi başına çözemez. +\nCihazınızda eski bir Shelter sürümünün veya başka bir uygulamanın oluşturduğu bir İş Profili varsa devam etmek için lütfen bu profili kaldırın (İş Profiline \"Ayarlar -> Hesap\" menüsünden ulaşabilirsiniz). \n -\nÇıkmak için İleri seçeneğine tıklayın. +\nEğer eski bir İş Profiliniz yoksa ve kurulumu iptal etmediyseniz, kurulumun başarısız olmasının sebebi yüksek ihtimalle Shelter ile başka bir İş Profili yöneticisinin çakışması veya sisteminizin büyük ölçüde değiştirilmiş olmasıdır. Shelter bu tip sorunları maalesef kendi başına çözemez. +\n +\nÇıkmak için \"İleri\" seçeneğine tıklayın. Shelter, çalışmak için herhangi bir izne ihityaç duymaz ancak kurulum sürecini başlattığınızda Shelter bir İş Profili oluşturmayı deneyecek ve bu İş Profilinin profil yöneticisi olacaktır. \n \nProfil yöneticisi, bir Cihaz Yöneticisi kadar kapsamlı yetkilere sahiptir fakat bu yetkiler sadece yönetilen profil için geçerlidir. Bu yetkiler Shelter\'ın sorunsuz bir şekilde çalışması için gereklidir. From f1f66a6a9befef3820de0b6d343e9df4a4bf19e1 Mon Sep 17 00:00:00 2001 From: gorogr Date: Sun, 21 Nov 2021 02:52:01 +0000 Subject: [PATCH 184/355] Translated using Weblate (Japanese) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/ja/ --- app/src/main/res/values-ja/strings.xml | 28 ++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index f56ccd5..00a75e6 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -98,4 +98,32 @@ セットアップに失敗しました 操作が必要です Shelterへようこそ + 他のアプリに偽のカメラアプリを提示し、Documents UI(および有効な場合はFile Shuttle)から任意の画像を撮影画像として選択できるようにします。これにより、Documents UIをネイティブにサポートしていなくても、他のカメラアプリを呼び出して写真を撮ることをサポートするすべてのアプリでFile Shuttleが有効になります。 + 画面をロックしたときに、フォアグラウンドのアプリ(アクティビティが表示されているもの)を凍結しない。これは音楽プレーヤーなどのアプリには便利ですが、その後「バッチフリーズ・ショートカット」を使って手動で凍結する必要があります。 + これで、Shelterの設定が完了しました。セットアッププロセスを完了させるには、後で通知をタップする必要があるため、まずお使いのデバイスがサイレントモードになっていないことを確認してください。 +\n +\n準備ができたら、「次へ」をタップして、セットアッププロセスを開始します。 + 権限についてひとこと + これで、Shelterからの通知が表示されるはずです。通知をタップして、セットアッププロセスを終了してください。 +\n +\n通知が表示されない場合は、デバイスが「サイレントモード」になっていないことを確認し、通知センターを下げてみてください。 +\n +\nShelterをリセットして最初からやり直すには、「設定」でShelterのデータを消去してください。 + デフォルトでは、Shelterは個々の権限を要求しません。しかし、セットアッププロセスを進めると、Shelterは仕事用プロファイルを設定しようとします。設定が完了すると、そのプロファイルのプロファイルマネージャーになります。 +\n +\nこれにより、Shelterには、プロファイル内に限定されてはいるものの、デバイス管理者に匹敵する幅広い権限が与えられます。プロファイルマネージャーになることは、Shelterのほとんどの機能に必要です。 +\n +\nShelterの高度な機能の中には、仕事用プロファイル以外のより多くの権限を必要とするものがあります。必要な場合は、あなたが対応する機能を有効したときに、Shelterはそれらの権限を別途要求します。 + Shelterは、AOSPライクなAndroid派生機種で開発・テストされています。これには、AOSP(Android Open Source Project)、Google Android(Pixel)、およびLineageOSなどのほとんどのAOSPベースのオープンソース・カスタムROMが含まれます。お使いの携帯電話が上記のAndroid派生機種のいずれかを搭載しているのであれば、おめでとうございます。シェルターはおそらくあなたの端末で正しく動作するでしょう。 +\n +\n一部の端末ベンダーは、Androidのコードベースに非常に侵襲的なカスタマイズを導入しているため、競合や非互換性、予期せぬ動作が発生することがあります。また、カスタムROMの中には、互換性を壊すような変更を加えるものもありますが、一般的には、端末ベンダーが導入した非互換性に比べれば、そのようなことはほとんどありません。 +\n +\nShelterは、システムが提供する機能のインターフェイスに過ぎません。システムが提供する機能が壊れていたり、非標準であったりした場合、Shelter は魔法のように独自に問題を解決することはできません。仕事用プロファイルが壊れることが知られているベンダー修正の Android バージョンを現在使用している場合は、警告されます。いずれにしても続行しても構いませんが、このような状況下でシェルターが正しく動作するという保証はありません。 + Shelterのセットアップを行うことができませんでした。 +\n +\nお使いのデバイスに、以前にShelterをインストールしたことがある場合や、他のアプリケーションで作成した仕事用プロファイルがすでに設定されている場合は、Shelterの設定を始める前に、「設定」→「アカウント」→「仕事用」でそのプロファイルを削除する必要があります。 +\n +\nそうでなければ、あなたが途中でセットアップをキャンセルしたわけではない場合、失敗の原因は、システムが大きく変更されているか、Shelterと他の仕事用プロファイルマネージャーとの間で競合が発生していることがほとんどです。残念ながら、これに対してできることはあまりありません。 +\n +\nNext \"をタップして終了します。 \ No newline at end of file From 975bcfbc92c0dea7ad89490dde8389df77f4f4d7 Mon Sep 17 00:00:00 2001 From: Mohammed Anas Date: Wed, 2 Feb 2022 17:25:33 +0000 Subject: [PATCH 185/355] Translated using Weblate (Arabic) Currently translated at 77.5% (76 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/ar/ --- app/src/main/res/values-ar/strings.xml | 46 ++++++++++++++------------ 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 79093e7..dfd6890 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -1,20 +1,20 @@ أنت على وشك إعداد العازل.\n\nيعتمد هذا التطبيق على ميزة ملف العمل في أندرويد لعزل التطبيقات. إذا كنت تستخدم نسخة أندرويد معدله او مخصصه بصانع الهاتف (مثل MIUI) ، يجب عليك الآن الخروج و عدم استخدام هذا التطبيق.\n\nإذا اخترت المتابعة ، فسيقوم العازل بإعداد ملف العمل.\n\nإذا كنت مطورًا وترغب في جعل العازل يعمل على الأجهزة غير المتوافقة مثل MIUI ، فإن طلبات التعديل تكون دائمًا موضع ترحيب. المطور غير مسؤول إطلاقًا في حالة حدوث مشكله بجهازك غير متوافق. - وداعا - اكمل + وداعًا + أكمل خدمة عزل التطبيقات يحتاج العازل إلى أن يصبح مسؤول الجهاز من أجل تنفيذ مهام العزل الخاصة به. خدمة العزل العازل يعمل الآن … - الرئيسيه + الرئيسية العازل - %s [مجمد] - انسخ الي العازل (ملف العمل) + [مجمد] %s + انسخ إلى العازل (ملف العمل) انسخ للملف الرئيسي - الغاء التثبيت + إلغاء التثبيت تجميد - الغاء التجميد + إلغاء التجميد ابدأ إنشاء اختصار لإلغاء التجميد و البدء إلغاء التجميد و البدء @@ -24,49 +24,51 @@ تجميد الإعدادات حول - النسخه + النسخة كود المصدر الإبلاغ عن الأخطاء / تتبع المشاكل يجب منح إذن إدارة الجهاز لالعازل للعمل. حاول مرة اخرى. …الرجاء الانتظار بينما نقوم بإعداد ملف عمل العازل لك - اكتمل إعداد العازل. جاري إعادة تشغيل العازل الآن. إذا لم يبدأ العازل تلقائيًا ، يمكنك بدءه مرة أخرى. + اكتمل إعداد العازل. جاري إعادة تشغيل العازل الآن. إذا لم يبدأ العازل تلقائيًا، يمكنك بدءه مرة أخرى. تم رفض الإذن أو جهاز غير مدعوم لم يتم العثور على ملف العمل. يرجى إعادة تشغيل التطبيق لإعادة توفير الملف الشخصي. لا يمكن توفير ملف العمل. يمكنك المحاولة مرة أخرى عن طريق إعادة تشغيل العازل. - يبدو أنك قمت بتعطيل وضع العمل أثناء تشغيل العازل. إذا قمت بتفعيله الآن ، يرجى بدء العازل مرة أخرى. + يبدو أنك قمت بتعطيل وضع العمل أثناء تشغيل العازل. إذا قمت بتفعيله الآن، يرجى بدء العازل مرة أخرى. تم نسخ التطبيق \"%s\" بنجاح تم إلغاء تثبيت التطبيق \"%s\" بنجاح تم تجميد التطبيق \"%s\" بنجاح تم إلغاء تجميد التطبيق \"%s\" بنجاح لا يمكن استنساخ تطبيقات النظام إلى ملف تعريف لا يتحكم فيه العازل. - لا يمكن الغاء تثبيت تطبيقات النظام في ملف تعريف لا يتحكم فيه العازل. - لا يمكن إضافة اختصارات إلى منصة الإطلاق الخاصه بك. يرجى الاتصال بالمطور لمزيد من المعلومات. + لا يمكن إلغاء تثبيت تطبيقات النظام في ملف تعريف لا يتحكم فيه العازل. + لا يمكن إضافة اختصارات إلى منصة الإطلاق الخاصة بك. يرجى الاتصال بالمطور للمزيد من المعلومات. عمليات ل %s تم تجميد جميع التطبيقات في قائمة \"التجميد التلقائي\" بنجاح. - تم انشاء الاختصار - لا يمكن حاليًا استنساخ تطبيقات غير تابعة للنظام إلى ملف شخصي آخر على MIUI. الرجاء استنساخ متجر تطبيقات النظام (مثل متجر جوجل) في الملف الشخصي الآخر ثم تثبيت التطبيقات من هناك. + تم إنشاء اختصار لمشغلك. + لا يمكن حاليًا استنساخ تطبيقات غير تابعة للنظام إلى ملف شخصي آخر على MIUI. الرجاء استنساخ متجر تطبيقات النظام (مثل متجر جوجل) في الملف الشخصي الآخر ثم تثبيت التطبيقات من هناك. اختر ملف الصور التجميد التلقائي معلق سيقوم العازل تلقائيًا بتجميد التطبيقات التي تم إطلاقها من \"إلغاء التجميد و الإطلاق\" في حدث قفل الشاشة التالي. - عملية علي دفعة + عملية على دفعة تثبيت APK في العازل انتهى تركيب التطبيق في ملف العمل. التفاعل مكوك الملفات - عند التمكين ، ستتمكن من تصفح / عرض / اختيار / نسخ الملفات من العازل الي الملف الرئيسي والعكس ، عن طريق المستندات (المسماة الملفات أو المستندات الموجودة على منصة الإطلاق) أو التطبيقات التي تحتوي على دعم واجهة مستخدم المستندات (لا تحصل إلا على الوصول المؤقت إلى الملفات التي تختارها في واجهة مستخدم المستندات) ، في حين لا تزال تمتلك عزل نظام الملفات. + عند التمكين، ستتمكن من تصفح / عرض / اختيار / نسخ الملفات من العازل الي الملف الرئيسي والعكس، عن طريق المستندات (المسماة الملفات أو المستندات الموجودة على منصة الإطلاق) أو التطبيقات التي تحتوي على دعم واجهة مستخدم المستندات (لا تحصل إلا على الوصول المؤقت إلى الملفات التي تختارها في واجهة مستخدم المستندات)، في حين لا تزال تمتلك عزل نظام الملفات. اختيار صورة كاميرا وهمية - قدم تطبيق كميرا مزيفًا إلى تطبيقات أخرى ، مما يسمح لك باختيار صورة عشوائية من واجهة المستندات (و مكوك الملفات إذا تم تمكينه) كصورة ملتقطة. يؤدي ذلك إلى تمكين ميزة \"نقل الملفات\" لأي تطبيق يدعم استخدام تطبيقات كاميرا أخرى لالتقاط صورة ، حتى إذا كانت لا تدعم واجهة المستندات. + قدم تطبيق كاميرا مزيفًا إلى تطبيقات أخرى، مما يسمح لك باختيار صورة عشوائية من واجهة المستندات (و مكوك الملفات إذا تم تمكينه) كصورة ملتقطة. يؤدي ذلك إلى تمكين ميزة \"نقل الملفات\" لأي تطبيق يدعم استخدام تطبيقات كاميرا أخرى لالتقاط صورة، حتى إذا كانت لا تدعم واجهة المستندات. خدمات خدمة التجميد التلقائي - عندما يتم قفل الشاشة ، قم تلقائيًا بتجميد التطبيقات التي بدأت من اختصار \"إلغاء التجميد و البدأ\". - تخطي تطبيقات المفتوحه - لا تقم بتجميد التطبيقات المفتوحه (مع نشاط مرئي) عند قفل الشاشة. يمكن أن يكون هذا مفيدًا للتطبيقات مثل مشغل الموسيقى ، ولكن ستحتاج إلى تجميدها يدويًا من خلال \"اختصار تجميد دفعة\" بعد ذلك. - اكمل على أي حال + عندما يتم قفل الشاشة، قم تلقائيًا بتجميد التطبيقات التي بدأت من اختصار \"إلغاء التجميد و البدأ\". + تخطي التطبيقات المفتوحة + لا تقم بتجميد التطبيقات المفتوحة (مع نشاط مرئي) عند قفل الشاشة. يمكن أن يكون هذا مفيدًا للتطبيقات مثل مشغل الموسيقى، ولكن ستحتاج إلى تجميدها يدويًا من خلال \"اختصار تجميد دفعة\" بعد ذلك. + أكمل على أي حال يحتاج العازل إلى إذن إحصائيات الاستخدام للقيام بذلك. الرجاء تمكين الإذن لكلي التطبيقين بعد الضغط على "موافق". سيؤدي عدم القيام بذلك إلى عدم عمل هذه الميزة بشكل صحيح. السماح للأدوات في الملف الرئيسي إظهار كل التطبيقات - قد يتسبب التلاعب بالتطبيقات المخفية من القائمة في حدوث أعطال وكل أنواع السلوك غير المتوقع. على الرغم من ذلك ، يمكن أن تكون هذه الميزة مفيدة عندما لا يقوم ROM المخصص بتمكين جميع تطبيقات النظام الضرورية في الملف العمل بشكل افتراضي. إذا تابعت ، فهذا علي مسؤليتك الخاصه. + قد يتسبب التلاعب بالتطبيقات المخفية من القائمة في حدوث أعطال وكل أنواع السلوك غير المتوقع. على الرغم من ذلك، يمكن أن تكون هذه الميزة مفيدة عندما لا يقوم ROM المخصص بتمكين جميع تطبيقات النظام الضرورية في ملف العمل بشكل افتراضي. إذا تابعت، فهذا على مسؤليتك الخاصة. تأخير التجميد التلقائي فشل التثبيت تثبيت... + مستعد؟ + توافق \ No newline at end of file From a976f8e7114ca07f9274ec957df3d1fa9dad20a3 Mon Sep 17 00:00:00 2001 From: Faysal E Date: Wed, 2 Feb 2022 17:18:29 +0000 Subject: [PATCH 186/355] Translated using Weblate (Arabic) Currently translated at 77.5% (76 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/ar/ --- app/src/main/res/values-ar/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index dfd6890..3854261 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -71,4 +71,5 @@ تثبيت... مستعد؟ توافق + تجميد الآن \ No newline at end of file From fa618e0b49a9a89c024b42c9717bea8ad56cc735 Mon Sep 17 00:00:00 2001 From: ling Date: Thu, 3 Feb 2022 01:03:27 +0000 Subject: [PATCH 187/355] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/zh_Hant/ --- app/src/main/res/values-zh-rTW/strings.xml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index d6fada3..ed0d2ab 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -118,10 +118,12 @@ 請確保電話現在沒有使用勿擾模式,以容許一則通知出現,以作完成設置Shelter。請按該則通知。 \n \n完成後,請按下頁。 - 遺憾地,Shelter 未能正常運作。 + 很遺憾地通知您,我們無法為您設置 Shelter。 \n -\n如果您沒有取消設定Work Profile,失敗原因可能是因為電話的作業系統與AOSP 分別太大,或者其他Work Profile管理員與Shelter 不兼容。很抱歉,Shelter 對此無能為力。 +\n如果您的設備已經有一個工作配置文件,無論是來自以前安裝的 Shelter 還是來自其他應用程序,您必須在設置 -> 帳戶中刪除該配置文件,然後 Shelter 才能繼續。 \n -\n按Next 離開。 +\n否則,如果您沒有手動取消設置,那麼失敗的原因最常見的原因是系統進行了大量修改,或者 Shelter 與其他工作配置文件管理器之間存在衝突。 不幸的是,我們對此無能為力。 +\n +\n點擊“下一步”退出。 需要你的輸入 \ No newline at end of file From 0e18dd2b512509dc2c16782c83f59160f243adbc Mon Sep 17 00:00:00 2001 From: Faysal E Date: Fri, 11 Feb 2022 17:43:00 +0000 Subject: [PATCH 188/355] Translated using Weblate (Arabic) Currently translated at 81.6% (80 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/ar/ --- app/src/main/res/values-ar/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 3854261..0de57b3 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -72,4 +72,6 @@ مستعد؟ توافق تجميد الآن + من فضلك انتظر… + افتح واجهة المستندات \ No newline at end of file From 5207fd7eb913a366c0fc470bde97c45f1c3f95ad Mon Sep 17 00:00:00 2001 From: Mohammed Anas Date: Fri, 11 Feb 2022 17:42:19 +0000 Subject: [PATCH 189/355] Translated using Weblate (Arabic) Currently translated at 81.6% (80 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/ar/ --- app/src/main/res/values-ar/strings.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 0de57b3..351ce9b 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -53,7 +53,7 @@ انتهى تركيب التطبيق في ملف العمل. التفاعل مكوك الملفات - عند التمكين، ستتمكن من تصفح / عرض / اختيار / نسخ الملفات من العازل الي الملف الرئيسي والعكس، عن طريق المستندات (المسماة الملفات أو المستندات الموجودة على منصة الإطلاق) أو التطبيقات التي تحتوي على دعم واجهة مستخدم المستندات (لا تحصل إلا على الوصول المؤقت إلى الملفات التي تختارها في واجهة مستخدم المستندات)، في حين لا تزال تمتلك عزل نظام الملفات. + عند التمكين، ستتمكن من تصفح / عرض / اختيار / نسخ الملفات من العازل إلى الملف الرئيسي والعكس، عن طريق المستندات (المسماة الملفات أو المستندات الموجودة على منصة الإطلاق) أو التطبيقات التي تحتوي على دعم واجهة مستخدم المستندات (لا تحصل إلا على الوصول المؤقت إلى الملفات التي تختارها في واجهة مستخدم المستندات)، في حين لا تزال تمتلك عزل نظام الملفات. اختيار صورة كاميرا وهمية قدم تطبيق كاميرا مزيفًا إلى تطبيقات أخرى، مما يسمح لك باختيار صورة عشوائية من واجهة المستندات (و مكوك الملفات إذا تم تمكينه) كصورة ملتقطة. يؤدي ذلك إلى تمكين ميزة \"نقل الملفات\" لأي تطبيق يدعم استخدام تطبيقات كاميرا أخرى لالتقاط صورة، حتى إذا كانت لا تدعم واجهة المستندات. خدمات @@ -74,4 +74,6 @@ تجميد الآن من فضلك انتظر… افتح واجهة المستندات + مرحبًا بك في Shelter + بحث \ No newline at end of file From 2b613059d74377a98b6564110b804d9e62c1e5db Mon Sep 17 00:00:00 2001 From: Mohammed Anas Date: Fri, 11 Feb 2022 17:44:00 +0000 Subject: [PATCH 190/355] Translated using Weblate (Arabic) Currently translated at 83.6% (82 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/ar/ --- app/src/main/res/values-ar/strings.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 351ce9b..65905ab 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -73,7 +73,8 @@ توافق تجميد الآن من فضلك انتظر… - افتح واجهة المستندات + فتح واجهة المستندات مرحبًا بك في Shelter بحث + ترجمة \ No newline at end of file From 76bc161a0f05e92c32e19c9c6308492963ee3e36 Mon Sep 17 00:00:00 2001 From: Faysal E Date: Fri, 11 Feb 2022 17:44:07 +0000 Subject: [PATCH 191/355] Translated using Weblate (Arabic) Currently translated at 83.6% (82 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/ar/ --- app/src/main/res/values-ar/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 65905ab..511f3cd 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -77,4 +77,5 @@ مرحبًا بك في Shelter بحث ترجمة + منع البحث عن جهات الاتصال \ No newline at end of file From a9f6361400c7afe289e1d3323bbea5b526c4855c Mon Sep 17 00:00:00 2001 From: mezysinc Date: Mon, 14 Feb 2022 13:42:37 +0000 Subject: [PATCH 192/355] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/pt_BR/ --- app/src/main/res/values-pt-rBR/strings.xml | 112 +++++++++++---------- 1 file changed, 57 insertions(+), 55 deletions(-) diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index e277c07..4e94fdc 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -11,17 +11,17 @@ \nVocê precisará receber uma notificação para finalizar a configuração, por favor, certifique-se de que seu dispositivo NÃO está no modo Não Perturbe. Tchau Continuar - Serviço de Isolamento - Shelter precisa tornar-se o Administrador do dispositivo com o objetivo de executar as tarefas de isolamento. + Serviço de isolamento + Shelter precisa tornar-se o Administrador do seu dispositivo para poder executar as tarefas de isolamento. Escolha um arquivo de imagem - Shelter Importante + Importante (Shelter) Clique aqui para concluir a configuração do Shelter Parabéns! Você está a um clique para concluir a configuração do Shelter. Serviço do Shelter - O Shelter está executado … + O Shelter está funcionando … Auto-suspensão pendente - O Shelter suspenderá automaticamente os apps executados de \"Ativar de novo & Iniciar\" no próximo intento de bloqueio da tela. - Suspender Agora + O Shelter automaticamente suspenderá os apps executados via \"Reativar e Iniciar\" no próximo intento de bloqueio da tela. + Suspender agora Instalando... Principal Shelter @@ -31,97 +31,99 @@ Clonar ao Perfil Principal Desinstalar Suspender - Ativar + Reativar Iniciar - Criar Ativar de novo e/ou Atalho de Iniciar - Ativar e Iniciar + Criar um atalho de Reativar e/ou Iniciar + Reativar e Iniciar Auto-Suspender - Permitir Widgets no Perfil Principal - Buscar + Permitir os widgets no Perfil Principal + Pesquisar Suspensão em grupo - Criar atalho para Suspensão em grupo + Criar um atalho para Suspensão em grupo Suspender Instalar APK no Shelter - Instalação do app no perfil de trabalho foi concluído. + A instalação do app no perfil de trabalho foi concluída. Mostrar todos os apps - Manipular os apps que estão ocultos da lista pode causar falha e todo tipo de comportamento inesperado. Entretanto, este recurso pode ser útil quando ROMs personalizados com defeitos não ativam, por padrão, todos os apps necessários do sistema no perfil de trabalho. Se continuar, você está por conta própria. + Administrar os apps que não estão visíveis na lista pode causar todo tipo de comportamentos inesperados e falhas. Entretanto, este recurso pode ser útil quando as ROMs personalizadas defeituosas, por padrão não descobrem todos os apps do sistema no Perfil de trabalho. Se continuar, esteja ciente disto. Configurações - Traslado de arquivos - Quando ativado, você será capaz de navegar / ver / escolher / copiar arquivos no Shelter de perfil principal e vice-versa, SOMENTE através da IU de Documentos (Arquivos ou Documentos em seu lançador) ou apps com suporte à Interface de Usuário de Documentos (eles só obtém acesso temporário aos arquivos que você escolher via IU de Documentos), enquanto ainda pertencentes ao isolamento do sistema de arquivos. - Seletor de imagens como câmera falsa - Apresentar um app de câmera falsa para outros apps, permitindo que você escolha uma imagem da sua escolha da Interface de Documentos (e do Traslado de arquivos, se ativado) como a foto feita. Isto permite que o Traslado de arquivos coopera com qualquer app que suporte a invocação de outros apps de câmera para tirar uma foto, mesmo que eles não suportem a IU de Documentos nativamente. + Transferência de arquivos + Quando ativado, você será capaz de explorar / ver / escolher e copiar os arquivos de Perfil principal no Shelter e vice-versa, SOMENTE via a interface de Documentos (Arquivos ou Documentos em seu lançador) ou apps com suporte à Interface de Documentos (recebem acesso temporário aos arquivos que você escolher via interface de Documentos), enquanto ainda pertencendo ao isolamento do sistema de arquivos. + Seletor de imagens via simulador de câmera + Lançar um app que simula a câmera para outros apps, permitindo que você selecione uma imagem da sua escolha da Interface de Documentos (e da Transferência de arquivos, se ativado) como se fosse a foto feita. Isto permite que a Transferência de arquivos funcione com qualquer app que tem suporte a invocação de apps de câmera para tirar uma foto, mesmo sem suporte nativo a interface de Documentos. Serviços Serviço de Auto-Suspensão - Quando a tela for bloqueada, suspende automaticamente os apps executados de \"Ativar & Atalho de Iniciar\". + Quando a tela for bloqueada, suspende automaticamente os apps executados de \"Atalho de Reativar e Iniciar\". Atraso de Auto-Suspensão Ignorar os apps em primeiro plano - NÃO suspenda os apps em primeiro plano (com atividade visível) quando a tela for bloqueada. Isto pode ser útil para apps como reprodutor de música, mas será necessário suspendê-los manualmente depois, através do \"Atalho de suspensão em grupo\". + NÃO suspenda os apps em primeiro plano (com atividade visível) quando a tela for bloqueada. Isto pode ser útil para os apps como reprodutor de música, mas será necessário suspendê-los manualmente através do \"Atalho de suspensão em grupo\". Sobre Versão - Código Fonte + Código-fonte Favor, aguarde enquanto nos preparamos perfil de Shelter para você … Configuração do Shelter concluída. Reiniciando o Shelter. Se o Shelter não iniciar automaticamente, você pode executá-lo novamente do seu lançador. Ou a permissão foi negada ou dispositivo não é suportado - Perfil de trabalho não encontrado. Por favor reinicie o App para reprovisionar o perfil. - Não é possível disponibilizar o perfil de trabalho. Você pode tentar novamente reiniciando o Shelter. - Parece que você desativou o Modo de Trabalho ao iniciar o Shelter. Se você tiver ativado neste momento, por favor, inicie o Shelter de novo. + Perfil de trabalho não foi encontrado. Por favor reinicie o app para verificar o perfil de novo. + Não foi possível criar o perfil de trabalho. Você pode tentar novamente reiniciando o Shelter. + Parece que você desativou o Perfil de Trabalho ao iniciar o Shelter. Se você tiver ativado agora, por favor, reinicie o Shelter. O app \"%s\" foi desinstalado com sucesso O app \"%s\" foi suspenso com sucesso - O app \"%s\" foi ativado com sucesso - Não é possível clonar apps do sistema ao perfil sobre qual o Shelter não tem controle. - Não é possível desinstalar apps de sistema do perfil sobre qual o Shelter não tem controle. - Não é possível adicionar atalhos ao seu lançador. Entre em contato com o desenvolvedor para mais detalhes. + O app \"%s\" foi reativado com sucesso + Não é possível clonar os apps do sistema ao perfil sobre qual o Shelter não tem controle. + Não é possível desinstalar os apps de sistema do perfil sobre qual o Shelter não tem controle. + Não é possível adicionar os atalhos ao seu lançador. Entre em contato com o desenvolvedor para mais detalhes. Operações para %s Todos os apps na lista de \"Auto-Suspensão\" foram suspensos com sucesso. - Atalho criado no seu lançador. - O Shelter precisa de permissão de Estatísticas de uso para fazer isto. Por favor active a permissão para AMBOS os apps do Shelter que aparecerão no diálogo após de clicar no \"Ok\". Se isso não for feito, este recurso não funcionará corretamente. - Não podia iniciar o app %s porque não tem GUI. - A clonagem de apps não-do-sistema para outro perfil não é atualmente suportado no MIUI. Por favor, clone a loja de apps do seu sistema (p.ex. a Play Store) ao outro perfil e depois instale os apps a partir daí. + Atalho foi criado no seu lançador. + O Shelter precisa de permissão para Estatísticas de uso para fazer isto. Por favor active a permissão para AMBOS os apps do Shelter que aparecerão no diálogo após clicar no \"Ok\". Se isso não for feito, este recurso não funcionará corretamente. + Não podia iniciar o app %s porque não tem interface. + A clonagem de apps fora do sistema para outro perfil não é suportado no MIUI. Por favor, clone a loja de apps do seu sistema (p.ex. a Play Store) ao outro perfil e depois instale os apps a partir daí. Interação Tem que conceder permissão de administração do dispositivo para que Shelter funcione bem. Favor, tente de novo. O app \"%s\" foi clonado com sucesso - Abrir IU de Documentos - Bloquear a Busca em Contatos - Negar o acesso do perfil principal aos contatos dentro do perfil de trabalho. + Abrir interface de Documentos + Bloquear a pesquisa em contatos + Negar o acesso do perfil principal aos contatos no perfil de trabalho. Traduzir - Relatório de Falhas / Problemas - O Shelter precisa ter acesso a Todos os arquivos para poder usar o Traslado de arquivos. Por favor ative a permissão para AMBOS (Pessoal / Trabalho) apps do Shelter que aparecerão no diálogo após de clicar no \"Ok\". - O Shelter precisa Exibir sobre outros apps para que o Traslado de arquivos funcione corretamente. Por favor ative a permissão para Ambos (Pessoal / Trabalho) apps do Shelter que aparecerão no diálogo após de clicar no \"Ok\". Esta permissão é usada para iniciar os serviços de Traslado de arquivos em segundo plano. - Sim, continuar + Relatar as falhas / problemas + O Shelter precisa ter acesso a Todos os arquivos para poder usar a Transferência de arquivos. Por favor ative a permissão para AMBOS (Pessoal / Trabalho) apps do Shelter que aparecerão no diálogo após clicar no \"Ok\". + O Shelter precisa Exibir sobre outros apps para que a Transferência de arquivos funcione corretamente. Por favor ative a permissão para Ambos (Pessoal / Trabalho) apps do Shelter que aparecerão no diálogo após clicar no \"Ok\". Esta permissão é usada para iniciar os serviços de Transferência de arquivos em segundo plano. + Quero continuar Bem-vindo ao Shelter Detalhes sobre as permissões Compatibilidade - Estamos prontos para configurar o Shelter para você. Por favor, certifique-se primeiro de que seu dispositivo não esteja no modo \"Não Perturbe\", porque mais tarde precisará clicar em uma notificação para finalizar o processo de configuração. + Vamos configurar o Shelter para você. Por favor, certifique-se primeiro de que seu dispositivo não esteja no modo \"Não Perturbe\", porque mais tarde você precisará clicar em uma notificação para finalizar o processo de configuração. \n \nQuando estiver pronto, clique em \"Próximo\" para iniciar o processo de configuração. Por favor, aguarde… A configuração falhou Lamentamos informar que não foi possível configurar o Shelter para você. \n -\nSe não cancelou a configuração manualmente, neste caso o motivo da falha é bem provável devido a um sistema excessivamente modificado, ou um conflito entre o Shelter e outros gerenciadores do Perfil de Trabalho. Infelizmente, não há muito que dá para fazer a respeito disso. +\nSe seu dispositivo já tinha configurado um Perfil de Trabalho, seja através uma instalação anterior do Shelter ou de outro app, você terá que remover primeiro esse perfil em Configurações -> Conta, para que o Shelter possa prosseguir. \n -\nClique em Próximo para sair. - Ação solicitada +\nSe você não cancelou a configuração manualmente, então é bem provável que a falha aconteceu devido a um sistema excessivamente modificado ou um conflito entre o Shelter e outros gerenciadores do Perfil de Trabalho. Infelizmente, não há muito que dá para fazer sobre isso. +\n +\nClique no \"Próximo\" para sair. + Ação necessária Pronto\? - Estamos tentando disponibilizar o Perfil de Trabalho e configurar o Shelter no seu dispositivo. - O Shelter é um App que facilita executar outros apps em um perfil isolado. Para isto ele usa o recurso de Perfil de Trabalho do Android. + Estamos tentando criar o Perfil de Trabalho e configurar o Shelter no seu dispositivo. + O Shelter é um app que ajuda a executar outros apps em um perfil isolado. Para isto ele usa o recurso de Perfil de Trabalho no Android. \n -\nClique no \"Próximo\", lá você verá mais informações sobre o Shelter, e o guia de como fazer o processo de configuração. +\nClique no \"Próximo\", para ver mais informações sobre o Shelter e o guia de como fazer o processo de configuração. \n \nSugerimos que você leia cuidadosamente todas as dicas a seguir. - Por padrão o Shelter não pedirá nenhuma permissão. Entretanto, uma vez que você prossiga com o processo de configuração, Shelter tentará configurar um Perfil de Trabalho e, portanto, se tornará o Gerenciador deste Perfil. + O Shelter, por padrão não pedirá nenhuma permissão. Entretanto, uma vez que você prossiga com o processo de configuração, ele tentará configurar o Perfil de Trabalho e tornar-se o Gerenciador dele. \n -\nIsto concederá ao Shelter uma ampla lista de permissões dentro do perfil, comparável a um Administrador de Dispositivo, embora confinado somente ao este perfil. Ser o gerenciador de perfil é necessário para realizar a maior parte das funcionalidades do Shelter. +\nIsto concederá ao Shelter uma ampla lista de permissões dentro do perfil, comparável com um Administrador de Dispositivo, embora confinado somente neste perfil. O gerenciamento do perfil é necessário para realizar a maioria das funcionalidades do Shelter. \n -\nAlgumas funcionalidades avançadas do Shelter podem requerer mais permissões fora do perfil de trabalho. Quando for necessário o Shelter solicitará essas permissões separadamente para ativar as funcionalidades correspondentes. - O Shelter é desenvolvido e testado em ROMs tipo AOSP do Android. Isto inclui AOSP (Android Open Source Project), Android do Google (em Pixels), e a maioria de ROMs personalizados de software livre baseadas em AOSP como o LineageOS. Se seu telefone está rodando um dos derivativos do Android listados acima, então parabéns! O Shelter provavelmente vai funcionar corretamente no seu aparelho. +\nAlgumas funcionalidades avançadas do Shelter podem exigir mais permissões fora do perfil de trabalho. Quando for necessário o Shelter solicitará essas permissões separadamente para ativar as funcionalidades correspondentes. + O Shelter é desenvolvido e testado em ROMs tipo AOSP do Android. Isto inclui AOSP (Android Open Source Project), Android do Google (telefones Pixel), e a maioria de ROMs personalizadas de software livre baseadas em AOSP como o LineageOS. Se seu telefone está rodando um dos derivativos do Android listados acima, então parabéns! O Shelter provavelmente vai funcionar corretamente no seu aparelho. \n -\nAlguns fornecedores de dispositivos introduzem customizações no código do Android muito invasivas, resultando em conflitos, incompatibilidades e comportamentos inesperados. Alguns ROMs personalizados podem conter as alterações que causam incompatibilidades, mas geralmente essas ocorrências são muito raras em comparação com essas induzidas pelo vendedor do telefone. +\nAlguns fornecedores de dispositivos introduzem customizações bem invasivas no código fonte do Android, resultando em conflitos, incompatibilidades e comportamentos inesperados. Algumas ROMs personalizadas podem conter as alterações que causam incompatibilidades, mas geralmente estes casos são muito raros em comparação às modificações introduzidas pelo vendedor do telefone. \n -\nO Shelter é meramente uma interface para o recurso do Perfil de Trabalho fornecido pelo sistema. Se o recurso for quebrado ou não padrão, o Shelter não poderia resolver o problema por si mesmo. Se você estiver usando atualmente uma versão do Android modificada pelo fornecedor que é conhecida por quebrar os Perfis de Trabalho, você foi avisado. Pode proceder de qualquer forma, mas não há garantia de que o Shelter funcionará corretamente sob estas circunstâncias. - Agora você deve estar vendo uma notificação do Shelter. Por favor, clique nessa notificação para terminar o processo de configuração. +\nO Shelter é meramente uma interface para o recurso do Perfil de Trabalho fornecido pelo sistema. Se o recurso for alterado ou não padrão, o Shelter não poderá resolver o problema por si só. Se você tiver uma versão do Android modificada pelo fornecedor, que é conhecida por quebrar os Perfis de Trabalho, você foi avisado. Você pode proceder mesmo assim, mas não há garantia de que o Shelter funcionará corretamente sob estas circunstâncias. + Neste momento você deveria ver uma notificação do Shelter. Por favor, clique nessa notificação para terminar o processo de configuração. \n -\nSe você não vir a notificação, certifique-se de que seu dispositivo não está no modo \"Não Perturbe\" e tente recuperar a notificação deslizando de cima para baixo. +\nSe você não vê a notificação, certifique-se de que seu dispositivo não está no modo \"Não Perturbe\" e tente recuperar ela da área de notificações deslizando de cima para baixo. \n -\nPara resetar o Shelter e começar de novo, você pode limpar os dados em Configurações. +\nPara reiniciar o Shelter e começar de novo, você pode limpar os dados em Configurações do app. \ No newline at end of file From bf0fd9d0fccbf315c1bc31d6240c8296acb5b50f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A0=20Vilanova?= Date: Thu, 24 Mar 2022 21:44:11 +0000 Subject: [PATCH 193/355] Translated using Weblate (Spanish) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/es/ --- app/src/main/res/values-es/strings.xml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index b89623f..3590a63 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -5,7 +5,7 @@ Suspensión automática pendiente Adiós Continuar - Servicio de aislamiento + Servicio de aislamiento de aplicaciones Shelter necesita convertirse en el administrador del dispositivo para realizar tareas de aislamiento. Elige un archivo de imagen Importante @@ -34,11 +34,11 @@ \nEsto proporcionara a Shelter una lista extensa de permisos dentro del perfil, comparables a los del administrador del dispositivo, aunque confinado al perfil. Ser el administrador de perfil es necesario para la mayoría de la funcionalidad de Shelter. \n \nAlgunas características avanzadas de Shelter podrían requerir mas permisos fuera del perfil de trabajo. Cuando sean necesarios, Shelter te solicitara esos permisos de manera individual cuando habilites tales características. - Shelter es desarrollado y probado en derivados de Android AOSP. Esto incluye AOSP(Android Open Source Project), Google Android(en Pixel) y la mayoría de las ROMs basadas en Android AOSP como LineageOS. Si tu dispositivo esta ejecutando alguno de los derivados de Android listados anteriormente, ¡felicitaciones! Shelter probablemente funcionara correctamente en tu dispositivo. + Shelter es desarrollado y probado en derivados de Android AOSP. Esto incluye AOSP (Android Open Source Project), Google Android (en Pixel) y la mayoría de las ROMs basadas en Android AOSP como LineageOS. Si tu dispositivo esta ejecutando alguno de los derivados de Android listados anteriormente, ¡felicitaciones! Shelter probablemente funcionara correctamente en tu dispositivo. \n \nAlgunos fabricantes de dispositivos introducen personalizaciones demasiado invasivas dentro del código fuente de Android lo cual resulta en conflictos, incompatibilidades y comportamientos inesperados. Algunas ROMs personalizadas también pueden introducir cambios que rompen con la compatibilidad pero generalmente son raros en comparación con las incompatibilidades introducidas por los fabricantes. \n -\nShelter es únicamente una interfaz a la característica del perfil de trabajo provista por el sistema. Si la característica provista por el sistema esta dañada o no es estandar Shelter no puede resolver el problema mágicamente por si mismo. Si actualmente estas usando una versión de Android modificada por el fabricante de la cual se sabe que incumple con los perfiles de trabajo has sido advertido. Puedes proceder de todos modos, pero no hay garantia de que Shelter se comporte de manera adecuada bajo esas circunstancias. +\nShelter es únicamente una interfaz a la característica del perfil de trabajo provista por el sistema. Si la característica provista por el sistema esta dañada o no es estándar Shelter no puede resolver el problema mágicamente por sí mismo. Si actualmente estas usando una versión de Android modificada por el fabricante de la cual se sabe que incumple con los perfiles de trabajo has sido advertido. Puedes proceder de todos modos, pero no hay garantía de que Shelter se comporte de manera adecuada bajo esas circunstancias. Presenta una aplicación de cámara falsa a otras aplicaciones, permitiéndote elegir una imagen arbitraria de la interfaz de documentos (y a la pasarela de archivos, si se encuentra habilitado) como la fotografía tomada. Esto habilita la pasarela de archivos para cualquier aplicaciones que tenga soporte para invocar otras aplicaciones para tomar una fotografía incluso si no soportan la interfaz de documentos de manera nativa. No se pueden desinstalar aplicaciones del sistema en un perfil del cual Shelter no tiene control. No se pueden agregar accesos directos a tu lanzador de aplicaciones. Por favor contacta al desarrollador para mas información. @@ -51,7 +51,9 @@ \nCuando estés listo, haz click en \"Siguiente\" para iniciar el proceso de instalación. Lamentamos informarte que no fuimos capaces de configurar Shelter para ti. \n -\nSi no cancelaste la instalación de manera manual, entonces una de las razones del fallo es comúnmente debido a un sistema fuertemente modificado o a un conflicto entre Shlter y otros administradores del perfil de trabajo. Desafortunadamente, no hay mucho que podamos hacer sobre esto. +\nSi tu dispositivo ya tenía un perfil de trabajo, ya sea de una instalación previa de Shelter o de otra aplicación, deberás eliminar ese perfil en Ajustes -> Cuentas antes de que Shelter pueda proceder. +\n +\nDe lo contrario, si no cancelaste la instalación de manera manual, entonces una de las razones del fallo es comúnmente debido a un sistema fuertemente modificado o a un conflicto entre Shelter y otros administradores del perfil de trabajo. Desafortunadamente, no hay mucho que podamos hacer sobre esto. \n \nHaz click en Siguiente para Salir. Acción requerida From cbeb287e17496a861ed6d5fd00527140246b0dee Mon Sep 17 00:00:00 2001 From: Konstantinos Date: Thu, 7 Apr 2022 08:32:01 +0000 Subject: [PATCH 194/355] Added translation using Weblate (Greek) --- app/src/main/res/values-el/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/src/main/res/values-el/strings.xml diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml new file mode 100644 index 0000000..a6b3dae --- /dev/null +++ b/app/src/main/res/values-el/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From f7270972a190b26d74c0ed5f55ddac740b2787b8 Mon Sep 17 00:00:00 2001 From: Konstantinos Date: Thu, 7 Apr 2022 12:56:03 +0000 Subject: [PATCH 195/355] Translated using Weblate (Swedish) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/sv/ --- app/src/main/res/values-sv/strings.xml | 113 +++++++++++++++++++++++++ 1 file changed, 113 insertions(+) diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index d3c9c7a..633dfe4 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -2,4 +2,117 @@ Frys Nu Installerar... + Hoppa över förgrundsappar + Neka åtkomst från primära profilen till kontakter i arbetsprofilen. + Att manipulera appar som är dolda från listan kan orsaka krascher och flera möjliga oväntade beteenden. Den här funktionen kan dock vara användbar när leverantörsanpassade ROM:er inte aktiverar alla nödvändiga systemappar i arbetsprofilen som standard. Om du väljer att fortsätta gör du det på egen hand. + Välkommen till Shelter + Blockera kontaktsökning + Hej då + Fortsätt + När skärmen är låst, frys automatiskt appar som startas från \"Tina upp & Starta\"-genvägen. + Fördröjning av automatisk frysning + Frys INTE förgrundsappar (med synlig aktivitet) när skärmen låsas. Detta kan vara användbart för appar som musikspelare, men du måste frysa dem manuellt genom \"Batch Freeze\"-genvägen efteråt. + Om + Version + Källkod + Applikationen \"%s\" klonades framgångsrikt + Applikationen \"%s\" avinstallerades framgångsrikt + Applikationen \"%s\" har frysts framgångsrikt + Applikationen \"%s\" tinades upp framgångsrikt + Alla appar i listan \"Automatisk frysning\" har frysts. + Det går inte att lägga till genvägar till din launcher. Kontakta utvecklaren för mer information. + Genväg skapad på din launcher. + Välj en bildfil + Det går inte att starta appen %s eftersom den har inte något GUI. + Att klona icke-systemappar till en annan profil är för närvarande inte möjligt på MIUI. Vänligen klona ditt systems appbutik (t.ex. Play Butik, FDroid) till den andra profilen och installera sedan appar därifrån. + Primär + Fortsätt ändå + Shelter + Det går inte att avinstallera systemappar i en profil som Shelter inte har kontroll över. + App-isoleringstjänst + Shelter behöver bli enhetsadministratör för att kunna utföra sina isoleringsuppgifter. + Viktigt om Shelter + Klicka här för att slutföra installationen av Shelter + Shelter-tjänst + Shelter är nu igång… + Shelter är en applikation som kan hjälpa dig att köra andra applikationer i en isolerad profil. Den gör det genom att använda funktionen Arbetsprofil i Android. +\n +\nKlicka på \"Nästa\" så ger vi dig mer information om Shelter och guidar dig genom installationsprocessen. +\n +\nVi föreslår att du läser igenom alla följande sidor noggrant. + Batch operation + Klona till Primär Profil + Avinstallera + Frysa + Tina upp + Starta + Skapa \"Tina upp och/eller Starta\"-genväg + Tina upp och Starta + Tillåt widgetar i primära profilen + Sök + Frysa automatiskt + Batchfrysa + Skapa \"Batchfrysa\"-genväg + Frysa + Installera APK i Shelter + Applikationsinstallation avslutad i arbetsprofilen. + Visa alla appar + Öppna \"Documents UI\" + Inställningar + Interaktion + File Shuttle + Bildväljare som falsk kamera + Översätt + Vi är nu redo att sätta upp Shelter åt dig. Se först till att din enhet inte är i \"Stör ej\"-läge, eftersom du kommer att behövaklicka på en avisering senare för att slutföra installationsprocessen. +\n +\nNär du är redo, klicka på \"Nästa\" för att påbörja installationsprocessen. + Kompatibilitet + Presentera en falsk kameraapp för andra appar, så att du kan välja en bild från Documents UI (och File Shuttle om den är aktiverad) som den tagna bilden. Detta aktiverar File Shuttle för alla appar som har stöd för att starta andra kameraappar för att ta en bild, även om de inte har stöd för Documents UI. + Tjänster + Buggrapport / Problemspårare + Behörighet nekas eller enhet som inte stöds + Installationen av Shelter är klar. Nu startar Shelter om. Om Shelter inte startade om automatiskt kan du göra det från din launcher. + När det är aktiverat kommer du att kunna bläddra / visa / välja / kopiera filer i Shelter från huvudprofilen och vice versa, ENDAST via funktionen \"Documents UI\" (som heter Files eller Documents på din launcher) eller via appar med \"Documents UI\"-stöd (de får bara tillfällig åtkomst till filer du väljer i Documents UI), medan filsystemets isolering fortsätter att gälla. + Några ord om behörigheter + Det gick inte att hitta arbetsprofilen. Starta om appen för att omregistrera profilen. + Det går inte att tillhandahålla arbetsprofil. Du kan försöka igen genom att starta om Shelter. + Det verkar som att arbetsprofilen var inaktiverad när Shelter startades. Om du nu har aktiverat det, starta om Shelter. + Det går inte att klona systemappar till en profil som Shelter inte har kontroll över. + Redo\? + Vänta… + Vi försöker initiera Work Profile och konfigurera Shelter på din enhet. + Konfigurationen misslyckades + Åtgärd krävs + Automatisk frystjänst + Operationer för %s + Du bör nu se en avisering från Shelter. Klicka på det aviseringen för att slutföra installationsprocessen. +\n +\nOm du inte ser aviseringen, se till att din enhet inte är i \"Stör ej\"-läge och försök dra ner meddelandecentret. +\n +\nFör att återställa Shelter och börja om kan du rensa Shelters data i Inställningar. + Tyvärr kunde vi inte konfigurera Shelter åt dig. +\n +\nOm din enhet redan hade en arbetsprofil konfigurerad, antingen från en tidigare installation av Shelter eller från en annan applikation, måste du ta bort den profilen i Inställningar -> Konto innan Shelter kan fortsätta. +\n +\nAnnars, om du inte avbröt installationen manuellt, beror orsaken till felet oftast på ett kraftigt modifierat system eller en konflikt mellan Shelter och andra appar som hanterar arbetsprofilen. Tyvärr finns det inte mycket vi kan göra åt detta. +\n +\nKlicka på \"Nästa\" för att avsluta. + Som standard kommer Shelter inte att be om några individuella behörigheter. Men när du väl har gått vidare med installationsprocessen kommer Shelter att försöka skapa en arbetsprofil och blir därför profilhanterare för profilen. +\n +\nDetta kommer att ge Shelter en omfattande lista med behörigheter i profilen, jämförbar med de för en enhetsadministratör, även om detta är begränsat till profilen. Att vara profilhanterare är nödvändigt för de flesta av Shelters funktionalitet. +\n +\nVissa avancerade funktioner i Shelter kan kräva fler behörigheter utanför arbetsprofilen. När det behövs kommer Shelter att be om dessa behörigheter separat när du aktiverar motsvarande funktioner. + Shelter är utvecklad och testad på AOSP-liknande Android-derivat. Detta inkluderar AOSP (Android Open Source Project), Google Android (på Pixel/enheter) och de flesta AOSP-baserade “custom ROMs” med öppen källkod, som LineageOS. Om din smartphone kör en av Android-derivaten som anges ovan, grattis! Shelter kommer förmodligen att fungera korrekt på din enhet. +\n +\nVissa enhetsleverantörer introducerar mycket invasiva anpassningar i Android-kodbasen, vilket resulterar i konflikter, inkompatibilitet och oväntat beteende. Vissa “custom ROMs” kan också införa kompatibilitetsbrytande förändringar, men i allmänhet är dessa sällsynta jämfört med telefonleverantörsintroducerade inkompatibiliteter. +\n +\nShelter är bara ett gränssnitt till funktionen \"Arbetsprofil\" som tillhandahålls av Android-systemet. Om funktionen som tillhandahålls av systemet är trasig eller icke-standard, kan Shelter inte magiskt lösa problemet på egen hand. Om du för närvarande använder en leverantörsmodifierad Android-version som är känd för att bryta arbetsprofilsfunktionen, har du blivit varnad. Du kan fortsätta ändå, men det finns ingen garanti för att Shelter ska bete sig korrekt under dessa omständigheter. + Shelter behöver Användningsstatistik-tillstånd för att göra detta. Vänligen aktivera behörigheten för BÅDA TVÅ Shelter-appar som visas i dialogrutan efter att du tryckt på \"OK\". Om du inte gör det kommer den här funktionen inte att fungera korrekt. + Grattis! Du är ett klick från att slutföra installationen av Shelter. + Shelter behöver åtkomst till Alla filer för File Shuttle. Vänligen aktivera behörigheten för BÅDA TVÅ Shelter-appar som visas i dialogrutan efter att du tryckt på \"OK\". + I väntan på automatisk frysning + Shelter kommer att automatiskt frysa appar som startas från \"Tina upp & Starta\" vid nästa skärmlåshändelse. + [Frusen] %s + Klona till Shelter (arbetsprofil) + Shelter måste Rita över andra appar för att File Shuttle ska fungera korrekt. Vänligen aktivera behörigheten för BÅDA TVÅ Shelter-appar som visas i dialogrutan efter att du tryckt på \"OK\". Denna behörighet används för att kunna starta File Shuttle-tjänster i bakgrunden. \ No newline at end of file From 7e6557164e09e75adf04e561ffcd3eff72ceb524 Mon Sep 17 00:00:00 2001 From: Konstantinos Date: Thu, 7 Apr 2022 09:16:17 +0000 Subject: [PATCH 196/355] Translated using Weblate (Greek) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/el/ --- app/src/main/res/values-el/strings.xml | 118 ++++++++++++++++++++++++- 1 file changed, 117 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index a6b3dae..4e64578 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -1,2 +1,118 @@ - \ No newline at end of file + + Κλωνοποίηση στο Κύριο Προφίλ + Απεγκατάσταση + Ξεπάγωσε + Εκκίνηση + Ομαδική εκτέλεση + Ξεπάγωσε και τρέξε + Επίτρεψε γραφικά στοιχεία (widgets) στο Κύριο Προφίλ + Αναζήτηση + Πάγωσε ομαδικά + Πάγωσε + Εγκατάσταση APK (αρχείου εφαρμογής) στο Shelter + Εμφάνιση όλων των εφαρμογών + Άνοιξε το Περιβάλλον Διαχείρισης Αρχείων (Documents UI) + Ρυθμίσεις + Αλληλεπίδραση + Αποκλεισμός αναζήτησης εφαρμογών + Υπηρεσίες + Υπηρεσία αυτόματου παγώματος εφαρμογών + Ευέλικτη Διαχείριση Αρχείων + Καθυστέρηση αυτόματου παγώματος + Παράβλεψη εφαρμογών που βρίσκονται στο προσκήνιο + Σχετικά με την εφαρμογή + Έκδοση + Πηγαίος κώδικας + Μετάφραση + Άρνηση αδειοδότησης ή μη υποστηριζόμενη συσκευή + Αποτυχία φόρτωσης του Προφίλ Εργασίας. Προσπάθησε ξανά επανεκκινώντας το Shelter. + Η εφαρμογή \"%s\" κλωνοποιήθηκε επιτυχώς + Η εφαρμογή \"%s\" απεγκαταστάθηκε επιτυχώς + Η εφαρμογή \"%s\" πάγωσε επιτυχώς + Η εφαρμογή \"%s\" ξεπάγωσε επιτυχώς + Αδυναμία απεγκατάστασης εφαρμογών συστήματος από ένα προφίλ που δεν ελέγχεται από το Shelter. + Όλες οι εφαρμογές στη λίστα \"Πάγωσε Αυτόματα\" έχουν παγώσει επιτυχώς. + Επιτυχής δημιουργία συντόμευσης. + Διεργασίες για την εφαρμογή %s + Συνέχισε παρόλα αυτά + Η κλωνοποίηση εφαρμογών χρήστη μεταξύ των Προφίλ είναι προς το παρόν αδύνατη στο MIUI. Μια πιθανή λύση σε αυτό το πρόβλημα είναι η κλωνοποίηση του καταστήματος εφαρμογών του συστήματος (πχ. Play Store, Fdroid) στο Προφίλ Εργασίας και η εγκατάσταση εφαρμογών από εκεί. + Το Shelter χρειάζεται να οριστεί ως Διαχειριστής Συσκευής ώστε να εκτελέσει τις υπηρεσίες απομόνωσης. + Όταν η οθόνη είναι κλειδωμένη, πάγωσε αυτόματα εφαρμογές που έχουν εκκινηθεί από τη συντόμευση \"Ξεπάγωσε και τρέξε\". + To Shelter είναι μια εφαρμογή που δίνει τη δυνατότητα να τρέξουν άλλες εφαρμογές μέσα σε ένα απομονωμένο προφίλ. Αυτό επιτυγχάνεται μέσω της χρήσης του Προφίλ Εργασίας , που αποτελεί μια δυνατότητα του Android. +\n +\nΠάτησε στο \"Επόμενο\" για να διαβάσεις περισσότερες πληροφορίες σχετικά με το Shelter και για να σε καθοδηγήσουμε κατά την διαδικασία ενεργοποίησής του. +\n +\nΠροτείνουμε να διαβάσεις τις πληροφορίες που ακολουθούν προσεκτικά. + Παράβλεψη παγώματος εφαρμογών που βρίσκονται στο προσκήνιο (με εμφανή δραστηριότητα) όταν κλειδώνει η οθόνη. Αυτό μπορεί να φανεί χρήσιμο για εφαρμογές όπως εφαρμογές αναπαραγωγής μουσικής, αλλά θα χρειαστεί αυτές να παγώσουν ενεργά μέσω της συντόμευσης \"Πάγωσε Αυτόματα\" σε δεύτερο χρόνο. + Έτοιμος/η; + Αναφορά προβλήματος (bug) / Παρακολούθηση προβλημάτων + Το Shelter χρειάζεται την άδεια Εμφάνιση πάνω σε άλλες εφαρμογές για τη σωστή λειτουργία της δυνατότητας \"Έξυπνη Διαχείριση Αρχείων\". Ενεργοποίησε την άδεια και για τις δύο εφαρμογές Shelter που θα εμφανιστούν στην επόμενη οθόνη, αφού πατήσεις \"ΟΚ\". Η άδεια αυτή χρειάζεται για τη δυνατότητα χρήσης της δυνατότητας \"Έξυπνη Διαχείριση Αρχείων\" στο παρασκήνιο. + Λίγη υπομονή… + Προσπάθεια ενεργοποίησης του Προφίλ Εργασίας και παραμετροποίησης του Shelter στη συσκευή. + Η παραμετροποίηση του Shelter ολοκληρώθηκε. Πραγματοποιείται επανεκκίνηση του Shelter. Αν το Shelter δεν ξεκίνησε αυτόματα, μπορείς να το εκκινήσεις ξανά από το μενού εφαρμογών της συσκευής. + Το Προφίλ Εργασίας δεν βρέθηκε. Επανεκκίνησε την εφαρμογή για προσπάθεια επαναφόρτωσής του. + Φαίνεται ότι το Προφίλ Εργασίας ήταν απενεργοποιημένο κατά την εκκίνηση του Shelter. Εάν τώρα το έχεις ενεργοποιήσει, ξεκίνησε ξανά το Shelter. + Αδυναμία κλωνοποίησης εφαρμογών συστήματος σε ένα Προφίλ που δεν ελέγχεται από το Shelter. + Αδυναμία δημιουργίας συντομεύσεων. Επικοινώνησε με τον προγραμματιστή του Shelter για περισσότερες πληροφορίες. + Αδυναμία εκκίνησης της εφαρμογής %s λόγω του ότι δεν υποστηρίζει γραφικό περιβάλλον (GUI). + Λογικά, πρέπει τώρα να βλέπεις μια ειδοποίηση από το Shelter. Χρειάζεται να επιλέξεις αυτή την ειδοποίηση ώστε να ολοκληρωθεί η διαδικασία ενεργοποίησης. +\n +\nΑν δεν βλέπεις την ειδοποίηση, βεβαιώσου πως η συσκευή σου δεν είναι σε λειτουργία \"Μην ενοχλείτε\" και προσπαθήστε να τραβήξετε προς τα κάτω τη μπάρα ειδοποιήσεων. +\n +\nΓια να επαναφέρεις το Shelter στην αρχική κατάσταση και να ξεκινήσεις από την αρχή, μπορείς να καθαρίσεις τα δεδομένα του από το μενού ρυθμίσεων της συσκευής. + Το Shelter έχει αναπτυχθεί και δοκιμαστεί σε συστήματα παράγωγα του Android. Αυτό περιλαμβάνει το AOSP (Android Open Source Project), το Google Android (πχ. Σε συσκευές Pixel) και τα περισσότερα λειτουργικά συστήματα (ROM) ανοιχτού κώδικα που βασίζονται σε AOSP, όπως το LineageOS. Εάν το τηλέφωνό σας χρησιμοποιεί ένα από τα παράγωγα Android που αναφέρονται παραπάνω, τότε συγχαρητήρια! Το Shelter πιθανότατα θα λειτουργήσει σωστά στη συσκευή σας. +\n +\nΟρισμένοι κατασκευαστές συσκευών πραγματοποιούν πολύ επεμβατικές προσαρμογές στον κώδικα του Android, με αποτέλεσμα ασυμβατότητα με κάποιες εφαρμογές και απροσδόκητη συμπεριφορά. Ορισμένες προσαρμοσμένες ROM μπορεί επίσης να περιέχουν αλλαγές που μειώνουν τη συμβατότητα, αλλά γενικά αυτές είναι πιο σπάνιες σε σχέση με τις ασυμβατότητες που εισάγουν οι κατασκευαστές συσκευών. +\n +\nΤο Shelter αποτελεί απλώς έναν μεσολαβητή που έχει το ρόλο διαχειριστή της λειτουργίας Προφίλ Εργασίας που παρέχεται από το σύστημα. Εάν η δυνατότητα αυτή, που παρέχεται από το σύστημα, δεν λειτουργεί σωστά ή είναι εφαρμοσμένη με ασυνήθιστο τρόπο, το Το Shelter δεν μπορεί να επιλύσει το πρόβλημα αυτό από μόνο του. Εάν αυτήν τη στιγμή χρησιμοποιείς μια έκδοση Android που έχει τροποποιηθεί από τον προμηθευτή ώστε να εμποδίζει τη χρήση του Προφίλ Εργασίας, θεωρούμε πως έχεις προειδοποιηθεί. Μπορείς φυσικά να δοκιμάσεις να συνεχίσεις, αλλά δεν υπάρχει καμία εγγύηση ότι το Shelter θα λειτουργήσει σωστά υπό αυτές τις συνθήκες. + Είμαστε έτοιμοι να ενεργοποιήσουμε το Shelter μαζί σου. Βεβαιώσου πρώτα πως η συσκευή σου δεν είναι σε λειτουργία \"Μην ενοχλείτε\", επειδή θα χρειαστεί να πατήσεις σε μια ειδοποίηση που θα εμφανιστεί, ώστε να ολοκληρωθεί η διαδικασία παραμετροποίησης. +\n +\nΌταν είσαι έτοιμος/η, πάτησε στο \"Επόμενο\", ώστε να ξεκινήσει η διαδικασία παραμετροποίησης. + Δυστυχώς δεν ήταν δυνατό να ενεργοποιηθεί το Shelter στη συσκευή σου +\n +\nΑν η συσκευή σου έχει ήδη ένα ενεργοποιημένο Προφίλ Εργασίας, είτε από προηγούμενη εγκατάσταση του Shelter είτε από κάποια άλλη εφαρμογή, χρειάζεται αυτό να διαγραφεί από το μενού Ρυθμίσεις->Λογαριασμοί, ώστε το Shelter να μπορέσει να συνεχίσει. +\n +\nΑλλιώς, αν δεν ακύρωσες τη διαδικασία ο ίδιος/η ίδια, τότε η αποτυχία ενεργοποίησης συνήθως σχετίζεται με την ύπαρξη ενός ιδιαίτερα τροποποιημένου συστήματος ή μιας ασυμβατότητας μεταξύ του Shelter και άλλων εφαρμογών-διαχειριστών του Προφίλ Εργασίας. Δυστυχώς δεν υπάρχει κάποια συγκεκριμένη λύση γι\' αυτό. +\n +\nΠάτησε \"Επόμενο\" για έξοδο. + Όταν είναι ενεργό, παρέχεται η δυνατότητα πρόσβασης/προβολής/επιλογής/αντιγραφής αρχείων του Προφίλ Εργασίας από το Κύριο Προφίλ και αντίστροφα Αυτό επιτυγχάνεται μέσω της λειτουργίας \"Documents UI\" (παρέχεται από την εφαρμογή \"Αρχεία\" ή \"Έγγραφα\" της συσκευής) ή μέσω εφαρμογών που υποστηρίζουν τη λειτουργία \"Documents UI\", ενώ παράλληλα διατηρείται η απομόνωση του συστήματος αρχείων μεταξύ των Προφίλ. Οι εφαρμογές που χρησιμοποιούνται για αυτή τη λειτουργία αποκτούν μόνο προσωρινή πρόσβαση στα αρχεία που επιλέγονται μέσω της λειτουργίας \"Documents UI\". + Κλωνοποίηση στο Shelter (Προφίλ Εργασίας) + Πάγωσε + Δημιούργησε συντόμευση \"Ξεπάγωσε και/ή τρέξε\" + Παρουσίαση μιας ψεύτικης κάμερας στις εφαρμογές, η οποία επιτρέπει την επιλογή μιας εικόνας μέσω της λειτουργίας \"Documents UI\" (ή της λειτουργίας \"Ευέλικτη Διαχείριση Αρχείων\", αν έχει ενεργοποιηθεί) και την παρουσίασή της σαν τη φωτογραφία που η υποτιθέμενη κάμερα τράβηξε. Αυτό επιτρέπει τη λειτουργία \"Ευέλικτη Διαχείριση Αρχείων\" για όλες τις εφαρμογές που υποστηρίζουν τη χρήση εφαρμογών κάμερας για λήψη φωτογραφιών, ακόμα και αν δεν υποστηρίζουν τη λειτουργία \"Documents UI\". + Πάγωσε αυτόματα + Το Shelter χρειάζεται την άδεια Usage Stats για την πραγματοποίηση αυτής της ενέργειας. Ενεργοποίησε την άδεια και για τις δύο εφαρμογές Shelter που θα εμφανιστούν στην επόμενη οθόνη, αφού πατήσεις \"ΟΚ\". Αν αυτό δεν πραγματοποιηθεί, ενδέχεται η εφαρμογή να μην λειτουργήσει σωστά. + Δημιουργία συντόμευσης \"Πάγωσε ομαδικά\" + Η εγκατάσταση εφαρμογής στο Προφίλ Εργασίας ολοκληρώθηκε. + Η τροποποίηση εφαρμογών που είναι κρυμμένες από τη λίστα μπορεί να προκαλέσει διαφόρων ειδών προβλήματα. Ωστόσο, αυτή η δυνατότητα μπορεί να είναι χρήσιμη όταν λειτουργικά συστήματα (ROMs) που είναι τροποποιημένα από τον κατασκευαστή δεν ενεργοποιούν αυτόματα όλες τις απαραίτητες εφαρμογές συστήματος στο Προφίλ Εργασίας. Είσαι μόνος σου σε αυτό, αν επιλέξεις να συνεχίσεις. + Επιλογή εικόνας για ψεύτικη κάμερα + Άρνηση πρόσβασης από το Κύριο Προφίλ στις επαφές του Προφίλ Εργασίας. + Το Shelter χρειάζεται πρόσβαση σε όλα τα αρχεία για τη χρήση της λειτουργίας \"Ευέλικτη διαχείριση αρχείων\". Ενεργοποίησε την άδεια και για τις δύο εφαρμογές Shelter που θα εμφανιστούν στην επόμενη οθόνη, αφού πατήσεις \"ΟΚ\". + Αντίο + Συνέχεια + Υπηρεσία απομόνωσης εφαρμογών + Επιλογή αρχείου εικόνας + Καλώς όρισες στο Shelter + Λίγα λόγια σχετικά με τα δικαιώματα της εφαρμογής + Συμβατότητα + Από προεπιλογή, το Shelter δεν θα ζητήσει μεμονωμένες άδειες. Ωστόσο, μόλις προχωρήσετε στη διαδικασία ρύθμισης, το Shelter θα προσπαθήσει να δημιουργήσει ένα προφίλ εργασίας και ως εκ τούτου να γίνει ο διαχειριστής προφίλ του εν λόγω προφίλ. +\n +\nΑυτό θα παραχωρήσει στο Shelter μια εκτενή λίστα αδειών εντός του προφίλ, συγκρίσιμη με αυτή ενός Διαχειριστή συσκευής, αν και περιορίζεται στο προφίλ. Το να είnαι διαχειριστής προφίλ είναι απαραίτητο για το μεγαλύτερο μέρος της λειτουργικότητας του Shelter. +\n +\nΟρισμένες προηγμένες λειτουργίες του Shelter ενδέχεται να απαιτούν περισσότερες άδειες εκτός του προφίλ εργασίας. Όταν χρειάζεται, το Shelter θα ζητήσει ξεχωριστά αυτά τα δικαιώματα όταν ενεργοποιήσετε τις αντίστοιχες δυνατότητες. + Αποτυχία ενεργοποίησης + Απαιτείται ενέργεια + Σημαντικό για το Shelter + Πάτησε εδώ για να ολοκληρώσεις την ενεργοποίηση του Shelter + Συγχαρητήρια! Είσαι μόνο ένα κλικ μακριά από την ολοκλήρωση ενεργοποίησης του Shelter. + Υπηρεσία του Shelter + Το Shelter είναι σε λειτουργία… + Αναμονή αυτόματου παγώματος εφαρμογών + Πάγωσε τώρα + Εγκατάσταση... + Κύριο + Shelter + [Παγωμένο] %s + Το Shelter θα παγώσει αυτόματα εφαρμογές που εκκινούνται με την επιλογή \"Ξεπάγωσε και τρέξε\" την επόμενη φορά που θα κλειδώσει η οθόνη της συσκευής. + \ No newline at end of file From a754568365163720caf7d1781c69116394e6a262 Mon Sep 17 00:00:00 2001 From: Roland Kim Date: Wed, 27 Jul 2022 05:21:52 +0000 Subject: [PATCH 197/355] Added translation using Weblate (Korean) --- app/src/main/res/values-ko/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/src/main/res/values-ko/strings.xml diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml new file mode 100644 index 0000000..a6b3dae --- /dev/null +++ b/app/src/main/res/values-ko/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From 36e8ccaafb82d1ee7d77b2a905e9d676cdcca98b Mon Sep 17 00:00:00 2001 From: Roland Kim Date: Wed, 27 Jul 2022 06:24:52 +0000 Subject: [PATCH 198/355] Translated using Weblate (Korean) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/ko/ --- app/src/main/res/values-ko/strings.xml | 118 ++++++++++++++++++++++++- 1 file changed, 117 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index a6b3dae..dce01b5 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -1,2 +1,118 @@ - \ No newline at end of file + + Shelter에 어서오세요 + 돌아가기 + 계속 진행 + 앱 격리 서비스 + 권한 관련 안내 + 다음 화면 잠금이 실행될 때 Shelter가 \"활성화 후 실행\"을 통해 실행된 앱을 자동으로 비활성화 처리합니다. + 활성화 + 준비되셨나요\? + 설정 실패 + 수동 조치 필요 + Shelter 알림 + Shelter 서비스 + 자동 비활성화 대기 중 + 설치 중... + 지금 비활성화 시작하기 + 개인 + 직장 + 제거하기 + 일괄 작업 + 직장 프로필로 복제하기 + 개인 프로필로 복제하기 + 실행하기 + 비활성화 + 일괄 비활성화 + 활성화/실행 바로 가기 만들기 + 개인 프로필에서 위젯 표시 허용 + 일괄 비활성화 바로 가기 만들기 + 자동 비활성화 + 파일 관리자 열기 + 프로필 간 동작 + 모든 앱 보이기 + 앱이 직장 프로필에 설치되었습니다. + 프로필 간 파일 공유 + 위장 카메라 앱을 통한 이미지 탐색 + 자동 비활성화 서비스 + 자동 비활성화 대기 시간 + 포어그라운드 실행 중인 앱 제외하기 + 버전 + 번역 + 버그 제보 / 이슈 추적 시스템 + 직장 프로필을 찾을 수 없습니다. 프로필을 다시 구성하려면 앱을 다시 실행해 주세요. + Shelter의 설정 작업이 완료되어 Shelter를 다시 시작합니다. Shelter가 자동으로 시작되지 않을 경우 홈 화면에서 수동으로 Shelter를 실행해 주세요. + \"%s\" 앱이 복제되었습니다 + \"%s\" 앱이 제거되었습니다 + \"%s\" 앱이 비활성화되었습니다 + Shelter가 제어하지 않는 프로필에는 시스템 앱을 복제할 수 없습니다. + 홈 화면에 바로 가기 아이콘을 만들었습니다. + Shelter가 제어하지 않는 프로필의 시스템 앱은 제거할 수 없습니다. + 홈 화면에 바로 가기 아이콘을 만들지 못했습니다. 상세한 정보는 개발자에게 문의해 주세요. + %s 앱에 대해 수행할 작업 + \"자동 비활성화\" 목록에 등록된 모든 앱이 비활성화되었습니다. + 계속 진행 + 현재 MIUI 환경에서는 비 시스템 앱을 다른 프로필로 복제하는 기능이 지원되지 않습니다. 현재 시스템의 앱 스토어(예시: Play Store)를 다른 프로필로 복제하신 후 복제된 앱 스토어 애플리케이션에서 앱을 내려받아 주세요. + 이미지 파일 고르기 + Shelter가 격리 작업을 진행하려면 기기 관리자 권한을 필요로 합니다. + 이 기능을 활성화하면 개인 및 직장 프로필에서 각각 상대 프로필의 파일에 접근하거나 상대 프로필 간 파일 작업을 할 수 있습니다. 이 기능은 파일 시스템 간 격리를 유지한 상태에서 문서 사용자 인터페이스(Documents UI, 보통 \"파일\" 또는 \"문서\"라는 이름을 가진 기본 파일 관리자 앱) 또는 문서 사용자 인터페이스를 지원하는 앱(문서 사용자 인터페이스를 통해 선택된 파일에 한해서만 임시적으로 접근 허용)을 통해서만 작동합니다. + 호환성 + 잠시만 기다려 주세요… + 직장 프로필에 APK 설치하기 + 카메라 앱으로 위장한 이미지 탐색기 앱을 추가합니다. 다른 앱에서 이 위장 앱을 불러오면 문서 사용자 인터페이스 및 프로필 간 파일 공유 기능(활성화되어 있을 시)을 통해 선택된 이미지 파일을 카메라 촬영 화면으로 인식하게 합니다. 외부 카메라 앱을 통한 사진 촬영을 지원하는 앱, 이 중 문서 사용자 인터페이스를 기본 지원하지 않는 앱에 특히 유용합니다. + 이 기능을 켜려면 사용 기록 액세스 권한을 필요로 합니다. \"확인\" 버튼을 누르신 후 양쪽 프로필 모두의 Shelter 앱에 대해 해당 권한을 허용해 주세요. 해당 권한이 허용되지 않은 경우 기능이 정상적으로 작동하지 않습니다. + 프로필 간 파일 공유 기능을 켜려면 모든 파일에 액세스 권한을 필요로 합니다. \"확인\" 버튼을 누르신 후 개인 및 직장 양쪽 프로필 모두의 Shelter 앱에 대해 해당 권한을 허용해 주세요. + 지금 직장 프로필 생성 및 Shelter의 설정 작업을 진행하고 있습니다. + 정보 + 프로필 간 파일 공유 기능을 정상적으로 사용하려면 다른 앱 위에 표시 권한을 필요로 합니다. \"확인\" 버튼을 누르신 후 개인 및 직장 양쪽 프로필 모두의 Shelter 앱에 대해 해당 권한을 허용해 주세요. 해당 권한은 프로필 간 파일 공유 서비스를 백그라운드로 실행시킬 때 필요합니다. + Shelter는 Android 시스템의 직장 프로필 기능을 이용하여 격리된 프로필 내에서 다른 앱을 실행할 수 있도록 도와줍니다. +\n +\n\"다음\" 버튼을 누르시면 Shelter에 대한 상세한 정보와 함께 설정 과정이 안내됩니다. +\n +\n원활한 설정 과정을 위해 다음 페이지부터 표시되는 모든 내용을 자세히 읽어 주시기 바랍니다. + 죄송합니다. Shelter 설정에 실패했습니다. +\n +\n만약 이전에 설치된 Shelter 또는 다른 앱에 의해 직장 프로필이 활성화되었다면 Shelter 설정을 진행하기에 앞서 [설정] → [계정]에서 해당 프로필을 제거해 주세요. +\n +\n위 사항에 해당하지 않으며 설정 과정을 임의로 중단하지 않았다면, 큰 규모의 변형 또는 수정이 가해진 시스템 또는 Shelter와 다른 직장 프로필 관리 도구와의 충돌이 원인일 수 있으며 이 경우 정상적인 Shelter 설정 작업이 어렵습니다. +\n +\n\"다음\" 버튼을 누르시면 Shelter가 종료됩니다. + \"%s\" 앱에 그래픽 인터페이스가 존재하지 않아 실행할 수 없습니다. + 이곳을 눌러 Shelter 설정 작업을 마무리하세요 + 설정 + 소스 코드 + Shelter 서비스가 실행 중입니다. + 목록에서 숨겨진 앱을 수정할 경우 앱 오작동을 비롯한 예상치 못한 현상을 유발할 수 있습니다. 다만 오류가 있는 제조사 ROM으로 인해 모든 필수 시스템 앱이 직장 프로필에서 활성화되지 않았다면 이 기능이 유용할 수 있으며, 계속 진행하시는 경우 상기한 위험을 감수하는 것입니다. + 검색 + 이제 Shelter 설정 작업을 시작합니다. 시작하기 전, 방해 금지 모드가 꺼진 상태인지 꼭 확인해 주세요. 이후 푸시 알림을 눌러야 설정 작업이 마무리되기 때문입니다. +\n +\n\"다음\" 버튼을 누르시면 설정 작업이 진행됩니다. + 이곳을 클릭하시면 Shelter의 설정 작업이 모두 마무리됩니다. + 연락처 검색 차단 + 개인 프로필에서 직장 프로필 내에 저장된 연락처로의 접근을 막습니다. + Shelter는 AOSP(Android Open Source Project), Google Android(Pixel 탑재 운영 체제) 및 대다수의 AOSP 기반 오픈 소스 커스텀 ROM(LineageOS 등)과 같이 AOSP를 기반으로 파생된 Android 시스템들에서 개발 및 테스트되었습니다. 본 기기가 상기된 Android 시스템 중 하나를 실행하고 있다면, 이는 Shelter가 본 기기에서 올바르게 동작할 가능성이 높다는 뜻입니다. 👏 +\n +\n그러나 일부 기기 제조사의 경우 Android의 핵심 소스 코드에 매우 공격적인 변형 또는 수정을 가하여 충돌, 호환성 문제 및 예상치 못한 현상을 유발할 가능성이 있습니다. 일부 커스텀 ROM 또한 호환성 문제를 유발하는 수정 사항이 포함된 경우가 있으나, 기기 제조사에 의해 수정된 ROM의 경우보다는 호환성 문제가 발생할 가능성이 상대적으로 낮습니다. +\n +\nShelter는 Android 시스템이 지원하는 직장 프로필 기능을 사용하기 위한 인터페이스 역할을 합니다. 상기된 변형 또는 수정으로 인해 해당 기능이 오류를 포함하거나 표준에서 벗어난 상태로 제공될 경우, 이로 인해 발생하는 문제를 Shelter가 스스로 해결하지 못할 수 있습니다. 만약 기기 제조사에 의한 변형 또는 수정이 가해져 직장 프로필 기능에 영향이 발생한 Android 시스템을 실행 중일 경우라면 특별한 주의가 필요합니다. 이러한 사항을 무시하고 설정을 진행하실 수 있으나, 위와 같은 환경에서 Shelter의 올바른 동작을 보장할 수는 없습니다. + Shelter는 기본적으로 개별 권한들의 활성화를 요구하지 않으나, 설정 작업을 진행하면 Shelter는 직장 프로필의 생성을 시도하게 되며 이에 따라 해당 프로필의 프로필 관리자로 설정됩니다. +\n +\nShelter가 프로필 관리자로 설정되면 해당 프로필에 한정하여 기기 관리자 앱과 유사한 수준의 각종 권한이 Shelter에 부여됩니다. Shelter의 대부분의 기능을 사용하기 위해서는 Shelter가 프로필 관리자로 설정되어야 합니다. +\n +\nShelter의 일부 고급 기능들의 경우 직장 프로필 외부의 권한이 추가로 필요할 수 있습니다. 관련된 고급 기능들을 켤 때 해당 권한들의 부여가 필요할 경우 Shelter는 해당 권한들의 활성화를 요청하게 됩니다. + 서비스 + 기기의 화면 잠금이 설정된 상태일 때 \"활성화 후 실행 바로 가기\"를 통해 실행된 앱들을 자동으로 비활성화 처리합니다. + 이제 Shelter가 띄운 푸시 알림이 보이실 것입니다. 해당 푸시 알림을 눌러주시면 설정 작업이 마무리됩니다. +\n +\n만약 푸시 알림이 보이지 않으시다면, 방해 금지 모드가 켜져 있지 않은지 확인하시고 알림 센터를 아래로 스와이프하여 푸시 알림이 표시되어 있는지 확인해 주세요. +\n +\nShelter를 초기화하고 처음부터 설정을 다시 진행하시려면 [설정]의 Shelter의 앱 정보 화면에서 [데이터 지우기]를 누른 후 다시 시도해 주시기 바랍니다. + 비활성화 + [비활성] %s + 화면 잠금이 실행되었을 때 포어그라운드에서 실행 중(화면에 표시 중)인 앱에 대하여 비활성화 처리를 하지 않습니다. 음악 플레이어 등의 앱을 사용하고 있을 때 유용한 기능이나, \"일괄 비활성화 바로 가기\"를 통하여 수동으로 비활성화해 주어야 합니다. + Shelter를 실행하는 도중 직장 프로필을 비활성화하신 것 같습니다. 이미 직장 프로필을 활성화하셨을 경우 Shelter를 다시 실행해 주세요. + 권한이 거부되었거나 지원하지 않는 기기입니다 + 직장 프로필 구성에 실패했습니다. Shelter를 다시 실행 후 재시도해 주세요. + 활성화 후 실행하기 + \"%s\" 앱이 활성화되었습니다 + \ No newline at end of file From 9a9832c6f1eed16af9140ee505364c7495928637 Mon Sep 17 00:00:00 2001 From: Pad Ibog Date: Fri, 5 Aug 2022 15:40:55 +0000 Subject: [PATCH 199/355] Added translation using Weblate (Bengali) --- app/src/main/res/values-bn/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/src/main/res/values-bn/strings.xml diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml new file mode 100644 index 0000000..a6b3dae --- /dev/null +++ b/app/src/main/res/values-bn/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From e483e45bc2f16cef6a80e6567b39476c6689b48a Mon Sep 17 00:00:00 2001 From: Pad Ibog Date: Fri, 5 Aug 2022 15:41:08 +0000 Subject: [PATCH 200/355] Translated using Weblate (Bengali) Currently translated at 8.1% (8 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/bn/ --- app/src/main/res/values-bn/strings.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index a6b3dae..0ee310c 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -1,2 +1,4 @@ - \ No newline at end of file + + বিদায় + \ No newline at end of file From 1f30e9fad6a91530d82e09ddf2e15eda0e7e8904 Mon Sep 17 00:00:00 2001 From: shop Date: Tue, 9 Aug 2022 13:16:11 +0000 Subject: [PATCH 201/355] Added translation using Weblate (Hebrew) --- app/src/main/res/values-iw/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/src/main/res/values-iw/strings.xml diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml new file mode 100644 index 0000000..a6b3dae --- /dev/null +++ b/app/src/main/res/values-iw/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From 1d89e9804d48e97d26e6ac45139d01e11077c67b Mon Sep 17 00:00:00 2001 From: shop Date: Tue, 9 Aug 2022 13:18:06 +0000 Subject: [PATCH 202/355] Translated using Weblate (Hebrew) Currently translated at 56.1% (55 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/he/ --- app/src/main/res/values-iw/strings.xml | 75 +++++++++++++++++++++++++- 1 file changed, 74 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index a6b3dae..558b7d1 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -1,2 +1,75 @@ - \ No newline at end of file + + להמשיך + בחר קובץ תמונה + ברוכים הבאים Shelter + מילה על הרשאות + תאימות + ביי + שירות בידוד אפליקציות + Shelter צריך להפוך ל-מנהל המכשיר כדי לבצע את משימות הבידוד שלו. + Shelter הוא יישום שעוזר לך להפעיל יישומים אחרים בפרופיל מבודד. זה עושה זאת על ידי שימוש בתכונה פרופיל עבודה של Android. +\n +\nלחץ על \"הבא\", ואנו נספק לך מידע נוסף על Shelter, וננחה אותך בתהליך ההגדרה. +\n +\nאנו ממליצים לקרוא בעיון את כל העמודים הבאים. + אפשר ווידג\'טים בפרופיל הראשי + התקנת האפליקציה הסתיימה בפרופיל העבודה. + מוכן\? + כעת אנו מוכנים להקים עבורך את Shelter. תחילה ודא שהמכשיר שלך לא במצב \'נא לא להפריע\', מכיוון שתצטרך ללחוץ על הודעה מאוחר יותר כדי לסיים את תהליך ההגדרה. +\n +\nכשתהיה מוכן, לחץ על \"הבא\" כדי להתחיל בתהליך ההגדרה. + נא להמתין… + אנחנו מנסים לאתחל את פרופיל העבודה ולהגדיר את Shelter במכשיר שלך. + ההגדרה נכשלה + פעולה נדרשת + כעת אתה אמור לראות הודעה מ-Shelter. אנא לחץ על הודעה זו כדי לסיים את תהליך ההגדרה. +\n +\nאם אינך רואה את ההתראה, ודא שהמכשיר שלך אינו במצב \'נא לא להפריע\' ונסה למשוך את מרכז ההתראות כלפי מטה. +\n +\nכדי לאפס את Shelter ולהתחיל מחדש, אתה יכול לנקות את הנתונים של Shelter בהגדרות. + מקלט חשוב + לחץ כאן כדי לסיים את הגדרת מקלט + מזל טוב! אתה במרחק קליק אחד מסיום ההגדרה של Shelter. + Shelter פועל כעת… + הקפאה אוטומטית בהמתנה + שירות Shelter + Shelter יקפיא אוטומטית אפליקציות שהושקו מ-\"Unfreeze & Launch\" באירוע נעילת המסך הבא. + להקפיא עכשיו + מתקין... + ראשי + Shelter + [מוקפא] %s + תפעול אצווה + שיכפול ל-Shelter (פרופיל עבודה) + שיכפול לפרופיל ראשי + הסר התקנה + הקפאה + הרץ + להפשיר + צור בטל הקפאה ו/או הפעל קיצור דרך + בטל את ההקפאה והפעל + הקפאה אוטומטית + הקפאת אצווה + חיפוש + צור קיצור דרך להקפאת אצווה + הקפאה + התקן APK לתוך Shelter + כברירת מחדל, Shelter לא יבקש הרשאות בודדות. עם זאת, לאחר שתמשיך בתהליך ההגדרה, Shelter ינסה להגדיר פרופיל עבודה ולפיכך יהפוך למנהל הפרופיל של הפרופיל האמור. +\n +\nזה יעניק ל-Shelter רשימה נרחבת של הרשאות בתוך הפרופיל, הדומה לזו של מנהל מכשיר, אם כי מוגבלת לפרופיל. להיות מנהל הפרופילים הכרחי עבור רוב הפונקציונליות של Shelter. +\n +\nחלק מהתכונות המתקדמות של Shelter עשויות לדרוש הרשאות נוספות מחוץ לפרופיל העבודה. בעת הצורך, Shelter יבקש את ההרשאות הללו בנפרד כאשר תפעיל את התכונות המתאימות. + Shelter פותח ונבדק על נגזרות אנדרואיד דמויות AOSP. זה כולל AOSP (Android Open Source Project), Google Android (על פיקסלים), ורוב ה-ROMs המותאמים אישית מבוססי AOSP כגון LineageOS. אם בטלפון שלך פועלת אחת מנגזרות האנדרואיד המפורטות למעלה, אז מזל טוב! Shelter כנראה הולך לעבוד כראוי במכשיר שלך. +\n +\nספקי מכשירים מסוימים מציגים התאמות אישיות פולשניות מאוד לבסיס הקוד של אנדרואיד, וכתוצאה מכך התנגשויות, חוסר תאימות והתנהגות בלתי צפויה. חלק מה-ROMs המותאמים אישית יכולים גם להציג שינויים שוברי תאימות, אך בדרך כלל אלו מקרים נדירים יותר בהשוואה לאי תאימות שהוצגו על ידי ספקי הטלפון. +\n +\nShelter הוא רק ממשק לתכונת פרופיל העבודה שמסופקת על ידי המערכת. אם התכונה שסופקה על ידי המערכת פגומה או לא סטנדרטית, Shelter לא הצליח לפתור את הבעיה בכוחות עצמו. אם אתה משתמש כעת בגרסת אנדרואיד ששונתה על ידי הספק, שידוע שהיא מפרה את פרופילי העבודה, הוזהרתם. אתה יכול להמשיך בכל מקרה, אבל אין ערובה ששלטר יתנהג נכון בנסיבות אלה. + אנו מצטערים להודיע לך שלא הצלחנו להקים עבורך את מקלט. +\n +\nאם למכשיר שלך כבר היה פרופיל עבודה, מהתקנה קודמת של Shelter או מאפליקציה אחרת, תצטרך להסיר את הפרופיל הזה בהגדרות -> חשבון לפני ש-Shelter יוכל להמשיך. +\n +\nאחרת, אם לא ביטלת את ההגדרה באופן ידני, הסיבה לכשל נובעת לרוב ממערכת ששונתה מאוד, או התנגשות בין Shelter ומנהלי פרופיל עבודה אחרים. למרבה הצער, אין הרבה מה שאנחנו יכולים לעשות בנידון. +\n +\nלחץ על \"הבא\" כדי לצאת. + \ No newline at end of file From 9c2357b1a1bd731964934153bcdff04e2092e089 Mon Sep 17 00:00:00 2001 From: shop Date: Mon, 15 Aug 2022 08:33:03 +0000 Subject: [PATCH 203/355] Translated using Weblate (Hebrew) Currently translated at 100.0% (98 of 98 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/he/ --- app/src/main/res/values-iw/strings.xml | 43 ++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 558b7d1..b8dbf18 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -72,4 +72,47 @@ \nאחרת, אם לא ביטלת את ההגדרה באופן ידני, הסיבה לכשל נובעת לרוב ממערכת ששונתה מאוד, או התנגשות בין Shelter ומנהלי פרופיל עבודה אחרים. למרבה הצער, אין הרבה מה שאנחנו יכולים לעשות בנידון. \n \nלחץ על \"הבא\" כדי לצאת. + הצג את כל האפליקציות + פתח את ממשק המשתמש של מסמכים + הגדרות + אינטראקציה + מעבורת קבצים + בוחר תמונה כמצלמה מזויפת + לא ניתן להסיר את ההתקנה של אפליקציות מערכת בפרופיל של-Shelter אין שליטה עליו. + חסום חיפוש אנשי קשר + שירותים + שירות הקפאה אוטומטית + השהיית הקפאה אוטומטית + דלג על אפליקציות חזית + אודות + גירסה + תרגם + דוח באגים / מעקב אחר בעיות + לא ניתן להקצות פרופיל עבודה. תוכל לנסות שוב על ידי הפעלה מחדש של Shelter. + היישום \"%s\" הוסר בהצלחה + האפליקציה \"%s\" הוקפאה בהצלחה + לא ניתן להוסיף קיצורי דרך למפעיל שלך. אנא צור קשר עם המפתח לקבלת מידע נוסף. + פעולות עבור %s + קיצור דרך נוצר על הלאנצר שלך. + לא ניתן להפעיל את האפליקציה %s כי אין לה GUI. + שכפול אפליקציות שאינן מערכתיות לפרופיל אחר אינו אפשרי כרגע ב-MIUI. נא לשכפל את חנות האפליקציות של המערכת שלך (למשל חנות Play) לפרופיל האחר ולאחר מכן התקן אפליקציות משם. + המשך בכל זאת + כל האפליקציות ברשימת \"הקפאה אוטומטית\" הוקפאו בהצלחה. + נראה שהשבתת את מצב עבודה בזמן הפעלת Shelter. אם הפעלת את זה עכשיו, הפעל שוב את Shelter. + הגדרת המקלט הושלמה. כעת מפעיל מחדש את Shelter. אם Shelter לא הופעל אוטומטית, תוכל להפעיל אותו שוב מהמפעיל שלך. + ההרשאה נדחתה או מכשיר לא נתמך + היישום \"%s\" שוכפל בהצלחה + פרופיל עבודה לא נמצא. אנא הפעל מחדש את האפליקציה כדי להקצות מחדש את הפרופיל. + אל תקפיא אפליקציות בחזית (עם פעילות גלויה) כאשר אתה נועל את המסך. זה יכול להיות שימושי עבור אפליקציות כמו נגני מוזיקה, אבל תצטרך להקפיא אותן באופן ידני באמצעות \"קיצור דרך להקפאת אצווה\" לאחר מכן. + קוד מקור + דחיית גישה מהפרופיל הראשי לאנשי קשר בתוך פרופיל העבודה. + האפליקציה \"%s\" הופשרה בהצלחה + לא ניתן לשכפל אפליקציות מערכת לפרופיל של-Shelter אין שליטה עליו. + כאשר המסך נעול, הקפיא אוטומטית אפליקציות שהופעלו מ\"בטל הקפאה והפעל קיצור דרך\". + מניפולציה של אפליקציות המוסתרות מהרשימה עלולה לגרום לקריסות ולכל מיני התנהגות בלתי צפויה. עם זאת, תכונה זו יכולה להיות שימושית כאשר ROMs פגומים המותאמים אישית של ספקים אינם מפעילים את כל אפליקציות המערכת הנחוצות בפרופיל העבודה כברירת מחדל. אם תמשיך, אתה לבד. + כאשר מופעל, תוכל לדפדף / להציג / לבחור / להעתיק קבצים ב-Shelter מהפרופיל הראשי ולהיפך, רק דרך ממשק המשתמש של מסמכים (ששמו קבצים או מסמכים במפעיל שלך) או אפליקציות עם תמיכה בממשק המשתמש של מסמכים (הם רק מרוויחים גישה זמנית לקבצים שתבחר בממשק המשתמש של מסמכים), תוך שמירה על בידוד מערכת הקבצים. + הצג אפליקציית מצלמה מזויפת לאפליקציות אחרות, מה שמאפשר לך לבחור תמונה שרירותית מממשק המשתמש של המסמכים (ומעבורת הקבצים אם מופעלת) בתור התמונה שצולמה. זה מאפשר העברת קבצים עבור כל אפליקציה שתומכת בהפעלת אפליקציות מצלמה אחרות כדי לצלם תמונה, גם אם הן אינן תומכות בממשק המשתמש המקורי של מסמכים + Shelter זקוק להרשאת סטטיסטיקות שימוש כדי לעשות זאת. אנא הפעל את ההרשאה עבור אפליקציות מקלט שתיים המוצגות בתיבת הדו-שיח לאחר לחיצה על \"אישור\". אם לא תעשה זאת, תכונה זו לא תפעל כראוי. + Shelter זקוק לגישה אל כל הקבצים עבור סייר הקבצים. אנא הפעל את ההרשאה עבור יישומי מקלט שניים (אישי / עבודה) המוצגים בתיבת הדו-שיח לאחר לחיצה על \"אישור\". + Shelter צריך לצייר מעל אפליקציות אחרות כדי ש-File Shuttle יפעל כהלכה. אנא הפעל את ההרשאה עבור יישומי מקלט שניים (אישי / עבודה) המוצגים בתיבת הדו-שיח לאחר לחיצה על \"אישור\". הרשאה זו משמשת להפעלת שירותי File Shuttle ברקע. \ No newline at end of file From 593d8103f23c8a580c493b62cb51c6c22bc74011 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 26 Aug 2022 16:47:51 -0400 Subject: [PATCH 204/355] chore: Upgrade build tool dependencies And move to mavenCentral instead of jcenter --- app/build.gradle | 12 ++---------- build.gradle | 6 +++--- gradle/wrapper/gradle-wrapper.properties | 2 +- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 590352b..00b8270 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -22,16 +22,8 @@ android { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } - lintOptions { - // We have community-contributed translations. Do not let them block releases. - disable 'MissingTranslation' - disable 'ExtraTranslation' - // We don't need Google App Indexing - disable 'GoogleAppIndexingWarning' - // Some dependencies still pull in Fragment 1.2.x - // Let's just ignore the error for now - // We don't really hit the broken use-cases for now - disable 'InvalidFragmentVersionForActivityResult' + lint { + disable 'MissingTranslation', 'ExtraTranslation', 'GoogleAppIndexingWarning', 'InvalidFragmentVersionForActivityResult' } } diff --git a/build.gradle b/build.gradle index 42810d6..f1ac6ef 100644 --- a/build.gradle +++ b/build.gradle @@ -4,10 +4,10 @@ buildscript { repositories { google() - jcenter() + mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.0.3' + classpath 'com.android.tools.build:gradle:7.2.2' // NOTE: Do not place your application dependencies here; they belong @@ -18,7 +18,7 @@ buildscript { allprojects { repositories { google() - jcenter() + mavenCentral() } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 34b93c1..ca14046 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip From 95e5ae2fa8a594c93588134d39bff672184d1795 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 26 Aug 2022 16:53:23 -0400 Subject: [PATCH 205/355] chore: Upgrade dependencies Not necessarily working yet. --- app/build.gradle | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 00b8270..b9c2fe5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -30,12 +30,12 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.legacy:legacy-support-core-ui:1.0.0' - implementation 'androidx.fragment:fragment:1.3.6' - implementation 'androidx.appcompat:appcompat:1.4.0-rc01' - implementation 'androidx.preference:preference:1.1.1' - implementation 'androidx.constraintlayout:constraintlayout:2.1.1' - implementation 'com.google.android.material:material:1.4.0' - implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0' + implementation 'androidx.fragment:fragment:1.5.2' + implementation 'androidx.appcompat:appcompat:1.6.0-beta01' + implementation 'androidx.preference:preference:1.2.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation 'com.google.android.material:material:1.6.1' + implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.1.0' implementation 'mobi.upod:time-duration-picker:1.1.3' debugImplementation project(path: ':setup-wizard-lib', configuration: 'gingerbreadCompatDebugRuntimeElements') releaseImplementation project(path: ':setup-wizard-lib', configuration: 'gingerbreadCompatReleaseRuntimeElements') From a2677d9f9d9cb11dfeaa3b5b0ee8d43ec46367eb Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 26 Aug 2022 16:56:03 -0400 Subject: [PATCH 206/355] gradle: Bring back jcenter just for time-duration-picker --- app/build.gradle | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/build.gradle b/app/build.gradle index b9c2fe5..fa02495 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,14 @@ apply plugin: 'com.android.application' +repositories { + //noinspection JcenterRepositoryObsolete + jcenter { + content { + includeVersion "mobi.upod", "time-duration-picker", "1.1.3" + } + } +} + android { compileSdkVersion 31 buildToolsVersion '30.0.3' From 030b9837dcd4ee57bca32afc7b4ef8f79b377fab Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 26 Aug 2022 17:02:25 -0400 Subject: [PATCH 207/355] gradle: Bump target SDK to 33 (T) --- app/build.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index fa02495..0db4888 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,12 +10,12 @@ repositories { } android { - compileSdkVersion 31 - buildToolsVersion '30.0.3' + compileSdkVersion 33 + buildToolsVersion '33.0.0' defaultConfig { applicationId "net.typeblog.shelter" minSdkVersion 24 - targetSdkVersion 31 + targetSdkVersion 33 versionCode 20 versionName "1.7" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" From 7ca33edd2674f3970e7ff415fa5f4ec4c9f27a93 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 26 Aug 2022 21:02:13 -0400 Subject: [PATCH 208/355] Use ACTION_PROVISIONING_SUCCESSFUL instead of ACTION_PROFILE_PROVISIONING_COMPLETE On Android 8.0+, the activity intent ACTION_PROVISIONING_SUCCESSFUL is also sent out before the broadcast ACTION_PROFILE_PROVISIONING_COMPLETE. We can make of use this to directly bring up an activity for finalization, skipping over our original notification-based switch-er-oo from the broadcast receiver. This is also necessary on platform release T since now we cannot send notifications by default. We cannot request for the permission either since that will require a visible activity too. Using the activity intent works around all of this and makes Shelter work again on T. (And we won't have to deal with the Do-Not-Disturb nonsense anymore) --- app/src/main/AndroidManifest.xml | 14 ++++++++++++++ .../receivers/ShelterDeviceAdminReceiver.java | 10 ++++++++-- .../typeblog/shelter/ui/FinalizeActivity.java | 19 +++++++++++++++++++ .../shelter/ui/SetupWizardActivity.java | 2 +- 4 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/net/typeblog/shelter/ui/FinalizeActivity.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2c0e61e..e8c93cb 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -84,6 +84,20 @@ + + + + + + + + + = Build.VERSION_CODES.O) return; + // Complex logic in a BroadcastReceiver is not reliable + // Delegate finalization to the DummyActivity Intent i = new Intent(context.getApplicationContext(), DummyActivity.class); i.setAction(DummyActivity.FINALIZE_PROVISION); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); diff --git a/app/src/main/java/net/typeblog/shelter/ui/FinalizeActivity.java b/app/src/main/java/net/typeblog/shelter/ui/FinalizeActivity.java new file mode 100644 index 0000000..184c309 --- /dev/null +++ b/app/src/main/java/net/typeblog/shelter/ui/FinalizeActivity.java @@ -0,0 +1,19 @@ +package net.typeblog.shelter.ui; + +import android.content.Intent; +import android.os.Bundle; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; + +public class FinalizeActivity extends AppCompatActivity { + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Intent i = new Intent(getApplicationContext(), DummyActivity.class); + i.setAction(DummyActivity.FINALIZE_PROVISION); + i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(i); + finish(); + } +} diff --git a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java index 9508232..595c42b 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java @@ -334,6 +334,7 @@ public class SetupWizardActivity extends AppCompatActivity { public void onNavigateNext() { super.onNavigateNext(); mActivity.switchToFragment(new PleaseWaitFragment(), false); + mActivity.setupProfile(); } @Override @@ -357,7 +358,6 @@ public class SetupWizardActivity extends AppCompatActivity { @Override public void onAttach(@NonNull Context context) { super.onAttach(context); - mActivity.setupProfile(); } @Override From 18012b8c64d34512b1eedff9b89b38c81eff5cd1 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 26 Aug 2022 21:09:44 -0400 Subject: [PATCH 209/355] SetupWizardActivity: better documentation --- .../java/net/typeblog/shelter/ui/SetupWizardActivity.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java index 595c42b..f892519 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java @@ -115,8 +115,9 @@ public class SetupWizardActivity extends AppCompatActivity { private void setupProfileCb(Boolean result) { if (result) { if (Utility.isWorkProfileAvailable(this)) { - // On pre-Oreo, and sometimes on post-Oreo - // the setup could be already finalized at this point + // The setup could be already finalized at this point + // (post-Oreo, since there is the activity intent ACTION_PROVISIONING_SUCCESSFUL, + // the work profile provisioning UI will not finish until that activity finishes.) // There is no need for more action finishWithResult(true); return; From 7202151378830b74ff13cb4011652252c0c6d597 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 26 Aug 2022 21:12:49 -0400 Subject: [PATCH 210/355] strings: Limit the "Do-Not-Disturb" nonsense to pre-Oreo --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 100d18d..a749c88 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -15,7 +15,7 @@ Compatibility Shelter is developed and tested on AOSP-like Android derivatives. This includes AOSP (Android Open Source Project), Google Android (on Pixels), and most AOSP-based open-source custom ROMs such as LineageOS. If your phone is running one of the Android derivatives listed above, then congratulations! Shelter is probably going to work correctly on your device.\n\nSome device vendors introduce very invasive customizations into the Android code base, resulting in conflicts, incompatibility and unexpected behavior. Some custom ROMs can also introduce compatibility-breaking changes, but generally these are rarer occurrences compared to phone vendor-introduced incompatibilities.\n\nShelter is merely an interface into the Work Profile feature provided by the system. If the feature provided by the system is broken or non-standard, Shelter could not magically resolve the issue on its own. If you are currently using a vendor-modified Android version that is known to break Work Profiles, you have been warned. You may proceed anyway, but there is no guarantee that Shelter would behave correctly under these circumstances. Ready? - We are now ready to set up Shelter for you. Please first ensure that your device is not in Do Not Disturb mode, because you will need to click on a notification later to finalize the setup process.\n\nWhen you are ready, click on \"Next\" to begin the setup process. + We are now ready to set up Shelter for you. If your device is running Android 7 or lower, please first ensure that your device is not in Do Not Disturb mode, because you will need to click on a notification later to finalize the setup process.\n\nWhen you are ready, click on \"Next\" to begin the setup process. Please wait… We are trying to initialize Work Profile and set up Shelter on your device. Setup failed From 14a4ca6cd23b80bff919550102f9e501a5396c9f Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 26 Aug 2022 21:15:53 -0400 Subject: [PATCH 211/355] SetupWizardActivity: better documentation again --- .../shelter/receivers/ShelterDeviceAdminReceiver.java | 2 +- .../net/typeblog/shelter/ui/SetupWizardActivity.java | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/net/typeblog/shelter/receivers/ShelterDeviceAdminReceiver.java b/app/src/main/java/net/typeblog/shelter/receivers/ShelterDeviceAdminReceiver.java index c82190b..0053e52 100644 --- a/app/src/main/java/net/typeblog/shelter/receivers/ShelterDeviceAdminReceiver.java +++ b/app/src/main/java/net/typeblog/shelter/receivers/ShelterDeviceAdminReceiver.java @@ -28,7 +28,7 @@ public class ShelterDeviceAdminReceiver extends DeviceAdminReceiver { Intent i = new Intent(context.getApplicationContext(), DummyActivity.class); i.setAction(DummyActivity.FINALIZE_PROVISION); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - // Delegate starting activity to notification so we won't break on Android 10 + // Delegate starting activity to notification to work around background limitations // And also maybe this will fix bugs on stupid custom OSes like MIUI / EMUI Notification notification = Utility.buildNotification(context, true, "shelter-finish-provision", diff --git a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java index f892519..8785570 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/SetupWizardActivity.java @@ -31,7 +31,8 @@ import net.typeblog.shelter.util.Utility; public class SetupWizardActivity extends AppCompatActivity { // RESUME_SETUP should be used when MainActivity detects the provisioning has been // finished by the system, but the Shelter inside the profile has never been brought up - // due to the user having not clicked on the notification yet. + // due to the user having not clicked on the notification yet (on Android 7 or lower). + // TODO: When we remove support for Android 7, get rid of all of these nonsense :) public static final String ACTION_RESUME_SETUP = "net.typeblog.shelter.RESUME_SETUP"; public static final String ACTION_PROFILE_PROVISIONED = "net.typeblog.shelter.PROFILE_PROVISIONED"; @@ -115,9 +116,11 @@ public class SetupWizardActivity extends AppCompatActivity { private void setupProfileCb(Boolean result) { if (result) { if (Utility.isWorkProfileAvailable(this)) { - // The setup could be already finalized at this point - // (post-Oreo, since there is the activity intent ACTION_PROVISIONING_SUCCESSFUL, - // the work profile provisioning UI will not finish until that activity finishes.) + // On Oreo and later versions, since we make use of the activity intent + // ACTION_PROVISIONING_SUCCESSFUL, the provisioning UI will not finish + // until that activity returns. In this case, there is really no need for us + // to do anything else here (and this callback may not even be called because + // the activity will likely be already finished by this point). // There is no need for more action finishWithResult(true); return; From 019abe5a0cb37768bf1c47ed312852f97a780643 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 26 Aug 2022 21:17:25 -0400 Subject: [PATCH 212/355] AndroidManifest: Remove meaningless commented-out permission --- app/src/main/AndroidManifest.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e8c93cb..21a934f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,7 +6,6 @@ - From 60a52ee7fb33aaca16acfde5aa0c0355d556504a Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 26 Aug 2022 21:31:23 -0400 Subject: [PATCH 213/355] Request notification permission on Tiramisu --- app/src/main/AndroidManifest.xml | 1 + .../typeblog/shelter/ui/DummyActivity.java | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 21a934f..df41671 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -19,6 +19,7 @@ + diff --git a/app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java b/app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java index d8a4e91..e6733bb 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/DummyActivity.java @@ -24,6 +24,7 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; +import androidx.core.content.ContextCompat; import net.typeblog.shelter.R; import net.typeblog.shelter.ShelterApplication; @@ -88,6 +89,7 @@ public class DummyActivity extends Activity { private static final int REQUEST_INSTALL_PACKAGE = 1; private static final int REQUEST_PERMISSION_EXTERNAL_STORAGE= 2; + private static final int REQUEST_PERMISSION_POST_NOTIFICATIONS = 3; // A state variable to record the last time DummyActivity was informed that someone // in the same process needs to call an action without signature @@ -130,8 +132,25 @@ public class DummyActivity extends Activity { Utility.enforceWorkProfilePolicies(this); Utility.enforceUserRestrictions(this); SettingsManager.getInstance().applyAll(); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + // We pretty much only send notifications to keep the process inside work profile alive + // as such, only request the notification permission from inside the profile + // This will ideally be shown and done when finalizing the profile (since it will go + // through this activity) + if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) + != PackageManager.PERMISSION_GRANTED) { + requestPermissions(new String[]{Manifest.permission.POST_NOTIFICATIONS}, REQUEST_PERMISSION_POST_NOTIFICATIONS); + // Continue once the request has been completed (see onRequestPermissionResult) + return; + } + } } + init(); + } + + private void init() { Intent intent = getIntent(); // First check if we have a registered request from the same process @@ -217,6 +236,11 @@ public class DummyActivity extends Activity { } else { finish(); } + } else if (requestCode == REQUEST_PERMISSION_POST_NOTIFICATIONS) { + // Regardless of the result, continue initialization + // This is fine because most functionalities will work anyway; it will just be a bit buggy + // and unreliable. + init(); } else { super.onRequestPermissionsResult(requestCode, permissions, grantResults); } From 5e2ca3f57513cec203a0f2b42bc901cba4110ae4 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 26 Aug 2022 21:32:14 -0400 Subject: [PATCH 214/355] Bump version to 1.8-dev1 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0db4888..7b6b59b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,8 +16,8 @@ android { applicationId "net.typeblog.shelter" minSdkVersion 24 targetSdkVersion 33 - versionCode 20 - versionName "1.7" + versionCode 21 + versionName "1.8-dev1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { From 705785630e7675ef8c97160e8dd15b8de47e60f8 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 27 Aug 2022 14:56:41 -0400 Subject: [PATCH 215/355] style: Use light status bar color Old Material is dead, long live Material Design --- .idea/deploymentTargetDropDown.xml | 12 ++++++------ app/src/main/res/values/styles.xml | 3 ++- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index 0b8f803..55a14b9 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -1,17 +1,17 @@ - + - + - - + + - - + + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 816a32d..25d0c4e 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -4,9 +4,10 @@ From ceda2ef715bf2171792f2a8812f5b24cee561137 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 27 Aug 2022 15:45:04 -0400 Subject: [PATCH 216/355] design: Use bottom navigation Straight to the evil side... --- .idea/misc.xml | 30 ++++++++++++++++-- .../net/typeblog/shelter/ui/MainActivity.java | 31 +++++++++++++------ .../bottom_navigation_color_selector.xml | 5 +++ app/src/main/res/drawable/ic_home.xml | 5 +++ app/src/main/res/drawable/ic_work.xml | 5 +++ app/src/main/res/layout/activity_main.xml | 24 +++++++++----- .../main/res/menu/bottom_navigation_menu.xml | 12 +++++++ app/src/main/res/values-v27/styles.xml | 7 +++++ app/src/main/res/values/colors.xml | 1 + app/src/main/res/values/styles.xml | 10 +++++- 10 files changed, 109 insertions(+), 21 deletions(-) create mode 100644 app/src/main/res/drawable/bottom_navigation_color_selector.xml create mode 100644 app/src/main/res/drawable/ic_home.xml create mode 100644 app/src/main/res/drawable/ic_work.xml create mode 100644 app/src/main/res/menu/bottom_navigation_menu.xml create mode 100644 app/src/main/res/values-v27/styles.xml diff --git a/.idea/misc.xml b/.idea/misc.xml index cc5f875..b73fd9c 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,27 +1,53 @@ + + + diff --git a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java index ee3aba7..15d8049 100644 --- a/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java +++ b/app/src/main/java/net/typeblog/shelter/ui/MainActivity.java @@ -18,7 +18,6 @@ import androidx.activity.result.ActivityResult; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.SearchView; @@ -27,8 +26,7 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.viewpager2.adapter.FragmentStateAdapter; import androidx.viewpager2.widget.ViewPager2; -import com.google.android.material.tabs.TabLayout; -import com.google.android.material.tabs.TabLayoutMediator; +import com.google.android.material.bottomnavigation.BottomNavigationView; import net.typeblog.shelter.R; import net.typeblog.shelter.ShelterApplication; @@ -204,7 +202,7 @@ public class MainActivity extends AppCompatActivity { // Finally we can build the view // Find all the views ViewPager2 pager = findViewById(R.id.main_pager); - TabLayout tabs = findViewById(R.id.main_tablayout); + BottomNavigationView nav = findViewById(R.id.main_bottom_navigation); // Initialize the ViewPager and the tab // All the remaining work will be done in the fragments @@ -226,12 +224,25 @@ public class MainActivity extends AppCompatActivity { return 2; } }); - String[] pageTitles = new String[]{ - getString(R.string.fragment_profile_main), - getString(R.string.fragment_profile_work) - }; - new TabLayoutMediator(tabs, pager, (tab, position) -> - tab.setText(pageTitles[position])).attach(); + pager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { + @Override + public void onPageSelected(int position) { + int[] menuIds = new int[]{ + R.id.bottom_navigation_main, + R.id.bottom_navigation_work + }; + nav.setSelectedItemId(menuIds[position]); + } + }); + nav.setOnItemSelectedListener((MenuItem item) -> { + int itemId = item.getItemId(); + if (itemId == R.id.bottom_navigation_main) { + pager.setCurrentItem(0); + } else if (itemId == R.id.bottom_navigation_work) { + pager.setCurrentItem(1); + } + return true; + }); } // Get the service on the other side diff --git a/app/src/main/res/drawable/bottom_navigation_color_selector.xml b/app/src/main/res/drawable/bottom_navigation_color_selector.xml new file mode 100644 index 0000000..6b84d3b --- /dev/null +++ b/app/src/main/res/drawable/bottom_navigation_color_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_home.xml b/app/src/main/res/drawable/ic_home.xml new file mode 100644 index 0000000..5a870f5 --- /dev/null +++ b/app/src/main/res/drawable/ic_home.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_work.xml b/app/src/main/res/drawable/ic_work.xml new file mode 100644 index 0000000..004293d --- /dev/null +++ b/app/src/main/res/drawable/ic_work.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 498de4f..9ef7b47 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -10,6 +10,7 @@ android:id="@+id/main_appbar" android:layout_width="0dp" android:layout_height="wrap_content" + app:elevation="0dp" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"> @@ -22,13 +23,6 @@ app:layout_scrollFlags="scroll|enterAlways" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> - - + app:layout_constraintBottom_toTopOf="@+id/main_bottom_navigation" /> + + \ No newline at end of file diff --git a/app/src/main/res/menu/bottom_navigation_menu.xml b/app/src/main/res/menu/bottom_navigation_menu.xml new file mode 100644 index 0000000..db10e5c --- /dev/null +++ b/app/src/main/res/menu/bottom_navigation_menu.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-v27/styles.xml b/app/src/main/res/values-v27/styles.xml new file mode 100644 index 0000000..65a476b --- /dev/null +++ b/app/src/main/res/values-v27/styles.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index a61264d..93f28fc 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -4,6 +4,7 @@ #C2C2C2 #009688 #FFC107 + #E0F2F1 #333333 #999999 #E0F2F1 diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 25d0c4e..d21dc88 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,7 +1,7 @@ - + + + + + \ No newline at end of file From 09e6e3db54e95ce08317252f0a8b4ac4b7221a8d Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 27 Aug 2022 16:24:53 -0400 Subject: [PATCH 222/355] colors: Fix text and menu colors in night mode --- app/src/main/res/values/styles.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index dbba419..d0046c0 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -6,9 +6,13 @@ @color/colorPrimary @color/colorPrimary @color/colorAccent + @color/colorTextPrimary true true @color/colorPrimary + @color/colorTextPrimary + @color/colorTextSecondary + @color/colorPrimary + + - - - - + + + + + + + + + egg_f + + + + + + + + From 3f33f87167dafc80bb5e501808e5a71479816c51 Mon Sep 17 00:00:00 2001 From: NXTGENCAT Date: Sun, 20 Oct 2024 11:51:33 +0000 Subject: [PATCH 354/355] Translated using Weblate (Telugu) Currently translated at 96.0% (96 of 100 strings) Translation: Shelter/Shelter Translate-URL: http://weblate.typeblog.net/projects/shelter/shelter/te/ --- app/src/main/res/values-te/strings.xml | 215 ++++++++++++++----------- 1 file changed, 120 insertions(+), 95 deletions(-) diff --git a/app/src/main/res/values-te/strings.xml b/app/src/main/res/values-te/strings.xml index a9e9937..d04230e 100644 --- a/app/src/main/res/values-te/strings.xml +++ b/app/src/main/res/values-te/strings.xml @@ -4,99 +4,124 @@ కొనసాగించు యాప్ ఐసోలేషన్ సర్వీస్ షెల్టర్ దాని ఐసోలేషన్ విధులను నిర్వహించడానికి డివైస్ అడ్మిన్ గా మారాలి. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + యాప్ %sని ప్రారంభించలేరు, ఎందుకంటే దానికి GUI లేదు. + మీ స్క్రీన్‌ను లాక్ చేయడం సమయంలో ముందంజ యాప్‌లను (కనిపించే కార్యకలాపం ఉన్న) ఫ్రిజ్ చేయకండి. ఇది సంగీత ప్లేయర్‌ల వంటి యాప్‌లకు ఉపయోగకరంగా ఉండవచ్చు, కానీ తర్వాత \"బ్యాచ్ ఫ్రిజ్ షార్ట్‌కట్\" ద్వారా వాటిని చేతితో ఫ్రిజ్ చేయాలి. + ఫైల్ షట్ల్ + ఇన్‌స్టాల్ చేయబడుతోంది... + అనుమతి నిరాకరించబడింది లేదా మద్దతు పొందని పరికరం + అనువాదం + దయచేసి వేచి ఉండండి… + [ఫ్రోజెన్] %s + మేము ఇప్పుడు మీ కోసం షెల్టర్‌ని సెటప్ చేయడానికి సిద్ధంగా ఉన్నాము. మీ పరికరం Android 7 లేదా అంతకంటే తక్కువగా నడుస్తోంటే, మొదట మీ పరికరం \"Do Not Disturb\" మోడ్‌లో లేదని నిర్ధారించుకోండి, ఎందుకంటే మీరు సెటప్ ప్రక్రియను పూర్తి చేయడానికి తర్వాత ఒక నోటిఫికేషన్‌పై క్లిక్ చేయాలి. +\n +\nమీరు సిద్ధంగా ఉన్నప్పుడు, సెటప్ ప్రక్రియ ప్రారంభించడానికి \"తదుపరి\"పై క్లిక్ చేయండి. + కార్య ప్రొఫైల్‌లోని సంప్రదింపులకు ప్రధాన ప్రొఫైల్ నుండి యాక్సెస్‌ను తిరస్కరించండి. + చెల్లింపు సేవ స్టబ్ (ఉపయోగించవద్దు) + \"షెల్టర్\" అనేది ఇతర యాప్‌లను వేరుప్రొఫైల్‌లో నడపడంలో మీకు సహాయం చేసే యాప్. ఇది ఆండ్రాయిడ్‌లోని వర్క్ ప్రొఫైల్ ఫీచర్‌ను ఉపయోగించడం ద్వారా పని చేస్తుంది. +\n +\n\"తదుపరి\"ను క్లిక్ చేయండి, మేము మీకు షెల్టర్ గురించి మరిన్ని వివరాలు అందించాము మరియు సెటప్ ప్రక్రియలో మిమ్మల్ని మార్గనిర్దేశం చేస్తాము. +\n +\nక్రింది పేజీలన్నీ జాగ్రత్తగా చదవాలని మేము సిఫార్సు చేస్తాము. + ఇంటరాక్షన్ + అభినందనలు! షెల్టర్‌ని సెటప్ చేయడం పూర్తి చేయడానికి మీరు ఒక్క క్లిక్ దూరంలో ఉన్నారు. + జాబితాలోని దాచిన యాప్‌లను మానిప్యులేట్ చేయడం వల్ల క్రాష్‌లు మరియు వివిధ రకాల అనూహ్య ప్రవర్తనలు కలిగించవచ్చు. అయితే, ఫాల్టీ విక్రేత-కస్టమైజ్డ్ ROMలు వర్క్ ప్రొఫైల్‌లో అన్ని అవసరమైన సిస్టమ్ యాప్లను డిఫాల్ట్‌గా ఎనేబుల్ చేయని సమయంలో ఈ ఫీచర్ ఉపయోగకరంగా ఉండవచ్చు. మీరు కొనసాగితే, మీరు మీ స్వంతంగా ఉంటారు. + సంప్రదింపుల అన్వేషణను అడ్డుకోండి + ఇది ఎనేబుల్ చేసినప్పుడు, మీరు షెల్టర్‌లో ఫైల్‌లను బ్రౌజ్ / వీక్షించడానికి / ఎంచుకోవడానికి / కాపీ చేయడానికి ప్రధాన ప్రొఫైల్ నుండి మరియు పునాదిగా, డాక్యుమెంట్స్ UI (మీ లాంచర్‌లో ఫైల్‌లు లేదా డాక్యుమెంట్స్ అని పిలవబడుతుంది) లేదా డాక్యుమెంట్స్ UI మద్దతు ఉన్న అనువర్తనాలను మాత్రమే ఉపయోగించి చేసుకోగలరు (అవి డాక్యుమెంట్స్ UIలో మీరు ఎంచుకున్న ఫైల్‌లకు తాత్కాలిక యాక్సెస్ పొందుతాయి), అయితే ఫైల్ సిస్టమ్ ఆర్థికంగా ఇన్సొలేషన్‌ను ఉంచుతుంది. + షెల్టర్ సెటప్ పూర్తి. ఇప్పుడు షెల్టర్‌ను పునఃప్రారంభించటం జరుగుతోంది. షెల్టర్ ఆటోమేటిక్‌గా ప్రారంభమైతే, మీ లాంచర్ నుండి మళ్లీ ప్రారంభించవచ్చు. + ప్రధాన ప్రొఫైల్‌లో ఒక జట్టుపై NFC చెల్లింపు సేవను ఎనేబుల్ చేయండి, తద్వారా సెట్టింగ్‌లలో - NFC క్రింద ఉన్న నిర్లక్ష్య చెల్లింపుల ఎంపిక ఎనేబుల్ అవుతుంది, ఇది మీకు వర్క్ ప్రొఫైల్‌లో చెల్లింపు అనువర్తనాన్ని ఎంచుకోవడానికి అనుమతిస్తుంది. ఇది ప్రధాన ప్రొఫైల్‌లో అందుబాటులో లేదు అంటే వర్క్ ప్రొఫైల్‌లో చెల్లింపు అనువర్తనాన్ని ఎంచుకోవడం అసాధ్యమైన ఆండ్రాయిడ్ బగ్‌ను చుట్టుకుంటుంది. + బ్యాచ్ ఫ్రీజ్ + షెల్టర్ ముఖ్యమైనది + అనువర్తనం \"%s\" విజయవంతంగా ఫ్రిజ్ చేయబడింది + షెల్టర్‌కు ఫైల్ షటిల్ సరిగ్గా పనిచేయడానికి ఇతర యాప్‌లపై డ్రా చేయడం అవసరం. \"ఓకే\" బటన్‌ను నొక్కిన తర్వాత డైలాగ్‌లో చూపించిన రెండు (వ్యక్తిగత / వర్క్) షెల్టర్ యాప్‌లకు ఈ అనుమతిని ఎనేబుల్ చేయండి. ఈ అనుమతి ఫైల్ షటిల్ సేవలను బ్యాక్‌గ్రౌండ్‌లో ప్రారంభించడానికి ఉపయోగించబడుతుంది. + + మీరు ఇప్పుడు షెల్టర్ నుండి ఒక నోటిఫికేషన్‌ను చూడాలి. దయచేసి ఆ నోటిఫికేషన్‌ను నొక్కండి సెటప్ ప్రక్రియను ముగించడానికి. +\n +\nమీరు నోటిఫికేషన్‌ను చూడకపోతే, మీ పరికరం \"డో నాట్ డిస్టర్బ్\" మోడ్‌లో లేదు అని నిర్ధారించుకోండి మరియు నోటిఫికేషన్ సెంటర్‌ను కిందకి పుల్లండి. +\n +\nషెల్టర్‌ను రీసెట్ చేసి మళ్లీ ప్రారంభించడానికి, సెటింగ్స్‌లో షెల్టర్ యొక్క డేటాను క్లియర్ చేయవచ్చు. + బ్యాచ్ ఫ్రీజ్ సత్వరం సృష్టించండి + షెల్టర్ (వర్క్ ప్రొఫైల్)కి క్లోన్ చేయండి + ప్రధాన ప్రొఫైల్‌లో విజెట్‌లను అనుమతించండి + \"ఆటో ఫ్రిజ్\" జాబితాలోని అన్ని యాప్‌లు విజయవంతంగా ఫ్రిజ్ చేయబడ్డాయి. + ఇప్పుడు ఫ్రీజ్ చేయండి + బగ్ నివేదిక / ఇష్యూ ట్రాకర్ + అన్‌ఇన్‌స్టాల్ చేయండి + + అనుకూలత + ఆటో-ఫ్రీజ్ పెండింగ్‌లో ఉంది + క్రాస్-ప్రొఫైల్ ఇంటరాక్షన్‌ను అనుమతించండి + గురించి + మేము మీ కోసం షెల్టర్‌ను సెటప్ చేయలేకపోయామని మీకు తెలియజేయడానికి మాకు దురదృష్టం ఉంది. +\n +\nమీ పరికరంలో ఇప్పటికే ఒక వర్క్ ప్రొఫైల్ ఉంటే, అది షెల్టర్ యొక్క గత ఇన్స్టాలేషన్ లేదా మరొక అనువర్తనంలోనూ, షెల్టర్ ముందుకు సాగడానికి ముందు దాన్ని సెటింగ్‌లలో -> ఖాతా ద్వారా తొలగించాలి. +\n +\nలేకపోతే, మీరు సెటప్‌ను చేతితో రద్దు చేయకపోతే, సెటప్ విఫలమైన కారణం సాధారణంగా చాలా మార్పులు చేసిన సిస్టమ్ లేదా షెల్టర్ మరియు ఇతర వర్క్ ప్రొఫైల్ మేనేజర్ల మధ్య సంకర్షణగా ఉంటుంది. దురదృష్టవశాత్తు, దీనిపై మేము చేసేMuch చేయడం లేదు. +\n +\nమీరైతే \"తదుపరి\"పై క్లిక్ చేసి బయటకు వెళ్ళండి. + MIUIలో మరో ప్రొఫైలుకు నాన్-సిస్టమ్ యాప్‌లను క్లోన్ చేయడం ప్రస్తుతం సాధ్యం కాదు. దయచేసి మీ సిస్టమ్ యొక్క యాప్ స్టోర్ (ఉదాహరణకు, ప్లే స్టోర్)ని ఇతర ప్రొఫైలుకు క్లోన్ చేసి, అక్కడ నుండి యాప్‌లను ఇన్‌స్టాల్ చేయండి. + + షెల్టర్ సేవ + బ్యాచ్ ఆపరేషన్ + అన్‌ఫ్రీజ్ చేసి ప్రారంభించండి + సేవలు + ఆటో ఫ్రిజ్ సేవ + వర్క్ ప్రొఫైల్‌ను అందుబాటులోకి తీసుకోలేకపోతున్నాము. షెల్టర్‌ను పునఃప్రారంభించి మళ్లీ ప్రయత్నించండి. + షెల్టర్ తదుపరి స్క్రీన్ లాక్ ఈవెంట్‌లో \"అన్‌ఫ్రీజ్ & లాంచ్\" నుండి ప్రారంభించబడిన యాప్‌లను ఆటో-ఫ్రీజ్ చేస్తుంది. + అనువర్తనం \"%s\" విజయవంతంగా అన్‌ఇన్‌స్టాల్ చేయబడింది + అన్‌ఫ్రిజ్ + షెల్టర్ కంట్రోల్ లో లేని ప్రొఫైల్‌కు సిస్టమ్ యాప్‌లను క్లోన్ చేయలేరు. + సెటప్ విఫలమైంది + వర్క్ ప్రొఫైల్ కనుగొనబడలేదు. ప్రొఫైల్‌ను మళ్లీ అందుబాటులోకి తీసుకురావడానికి దయచేసి యాప్‌ను పునఃప్రారంభించండి. + అనువర్తనం \"%s\" విజయవంతంగా అన్‌ఫ్రిజ్ చేయబడింది + వర్షన్ + అన్‌ఫ్రిజ్ మరియు/లేదా ప్రారంభ Shortcut‌ని సృష్టించు + షెల్టర్‌కు ఫైల్ షటిల్ కోసం అన్ని ఫైళ్లకు ప్రాప్యత అవసరం. \"ఓకే\" బటన్‌ను నొక్కిన తర్వాత డైలాగ్‌లో చూపించిన రెండు (వ్యక్తిగత / వర్క్) షెల్టర్ యాప్‌లకు ఈ అనుమతిని ఎనేబుల్ చేయండి. + డాక్యుమెంట్స్ UIని తెరువు + మేము మీ పరికరంలో వర్క్ ప్రొఫైల్‌ను ప్రారంభించడానికి మరియు షెల్టర్‌ను సెటప్ చేయడానికి ప్రయత్నిస్తున్నాము. + ప్రారంభించు + డిఫాల్ట్‌గా, షెల్టర్ ఏ వ్యక్తిగత అనుమతులను అడగదు. అయితే, మీరు సెటప్ ప్రక్రియను కొనసాగించిన తర్వాత, షెల్టర్ వర్క్ ప్రొఫైల్‌ను సెటప్ చేయడానికి ప్రయత్నిస్తుంది, అందువల్ల పేర్కొన్న ప్రొఫైల్‌కు ప్రొఫైల్ మేనేజర్ గా మారుతుంది. +\n +\nదీని ద్వారా షెల్టర్‌కు ఆ ప్రొఫైల్‌లో పరికర పరిపాలకుడి (డివైస్ అడ్మిన్) అనుమతులకు సమానమైన విస్తృత అనుమతుల జాబితా లభిస్తుంది, అయితే అవి ఆ ప్రొఫైల్‌కు మాత్రమే పరిమితమవుతాయి. షెల్టర్ యొక్క మెజారిటీ ఫీచర్ల కోసం ప్రొఫైల్ మేనేజర్‌గా ఉండటం అవసరం. +\n +\nషెల్టర్ యొక్క కొన్ని అధునాతన ఫీచర్లు వర్క్ ప్రొఫైల్ బయట మరిన్ని అనుమతులను అవసరం కావచ్చు. అవసరమైనప్పుడు, మీరు సంబంధిత ఫీచర్‌లను ప్రారంభించినప్పుడు, షెల్టర్ ఆ అనుమతులను వేరుగా అడుగుతుంది. + షెల్టర్ + షెల్టర్‌లో APK ఇన్‌స్టాల్ చేయండి + అనువర్తనం \"%s\" విజయవంతంగా క్లోన్ చేయబడింది + మీరు షెల్టర్‌ను ప్రారంభించే సమయానికి వర్క్ మోడ్‌ను అడ్డించారు అనిపిస్తోంది. మీరు ఇప్పుడు దీన్ని ఎనేబుల్ చేసినట్లయితే, దయచేసి షెల్టర్‌ను మళ్లీ ప్రారంభించండి. + + సోర్స్ కోడ్ + శోధించండి + మీ లాంచర్‌కు షార్ట్‌కట్స్‌ను జోడించలేరు. మరింత సమాచారం కోసం దయచేసి డెవలపర్‌ను సంప్రదించండి. + ఆటో ఫ్రీజ్ + షెల్టర్ ఇప్పుడు నడుస్తోంది… + ఆటో ఫ్రిజ్ ఆలస్యం + షెల్టర్ AOSP లాంటి ఆండ్రాయిడ్ డెరివేటివ్‌లపై అభివృద్ధి చేయబడింది మరియు పరీక్షించబడింది. ఇందులో AOSP (ఆండ్రాయిడ్ ఓపెన్ సోర్స్ ప్రాజెక్ట్), Google Android (Pixelsపై), మరియు LineageOS వంటి AOSP ఆధారిత ఓపెన్ సోర్స్ కస్టమ్ ROMలు ఎక్కువగా ఉన్నాయి. మీ ఫోన్ పై ఉంచిన ఆండ్రాయిడ్ డెరివేటివ్‌లలో ఏదైనా ఉంటే, అభినందనలు! షెల్టర్ మీ పరికరంలో సరిగా పనిచేసే అవకాశం ఉంది. +\n +\nకొంతమంది పరికర తయారీదారులు ఆండ్రాయిడ్ కోడ్ బేస్‌లో చాలా దూకుడైన అనుకూలీకరణలు ప్రవేశపెడతారు, ఇది సంగర్షణలు, అనుకూలత సమస్యలు మరియు అనూహ్య ప్రవర్తనకు కారణమవుతుంది. కొంతమంది కస్టమ్ ROMలు కూడా అనుకూలతను విచ్ఛిన్నం చేసే మార్పులను ప్రవేశపెట్టవచ్చు, కానీ సాధారణంగా ఇవి ఫోన్ తయారీదారుల మార్పులతో పోలిస్తే చాలా అరుదుగా జరుగుతాయి. +\n +\nషెల్టర్ కేవలం సిస్టమ్ అందించే వర్క్ ప్రొఫైల్ ఫీచర్‌కు ఇన్టర్ఫేస్ మాత్రమే. సిస్టమ్ అందించే ఫీచర్ పనిచేయకపోతే లేదా ప్రామాణికం కాకపోతే, షెల్టర్ స్వతహాగా ఆ సమస్యను పరిష్కరించలేము. మీరు ప్రస్తుతం వర్క్ ప్రొఫైల్‌లను విరమించడానికి ప్రసిద్ధి చెందిన విక్రేత-మార్పుచేసిన ఆండ్రాయిడ్ వర్షన్‌ను ఉపయోగిస్తున్నట్లయితే, మీకు హెచ్చరిక ఇచ్చాము. అయినప్పటికీ మీరు కొనసాగవచ్చు, కానీ ఈ పరిస్థితులలో షెల్టర్ సరైన ప్రవర్తనకాని గ్యారంటీ లేదు. + షెల్టర్‌ని సెటప్ చేయడానికి ఇక్కడ క్లిక్ చేయండి + షెల్టర్‌కు ఇది చేయడానికి ఉపయోగం స్థితులు అనుమతి అవసరం. \"ఓకే\" బటన్‌ను నొక్కిన తర్వాత డైలాగ్‌లో చూపిన రెండు షెల్టర్ యాప్‌లకు ఈ అనుమతిని ఎనేబుల్ చేయండి. అది చేయనట్లయితే, ఈ ఫీచర్ సరిగ్గా పనిచేయదు. + + అనుమతుల గురించి ఒక మాట + వర్క్ ప్రొఫైల్‌లో అప్లికేషన్ ఇన్‌స్టాలేషన్ పూర్తి చేయబడింది. + ప్రధాన + మీ లాంచర్‌పై షార్ట్‌కట్ సృష్టించబడింది. + సెట్టింగ్స్ + ముఖ్యమైన యాప్‌లను తొలగించు + చెల్లింపు సేవ స్టబ్ + %s కోసం ఆపరేషన్స్ + షెల్టర్ కంట్రోల్ లో లేని ప్రొఫైల్‌లో సిస్టమ్ యాప్‌లను అన్‌ఇన్‌స్టాల్ చేయలేరు. + ఏదైనా కొనసాగించండి + + ఫ్రిజ్ + వీడ్కోలు + సిద్ధంగా ఉన్నారా? + + స్క్రీన్ లాక్ అయినప్పుడు, \"అన్‌ఫ్రిజ్ & లాంచ్ షార్ట్‌కట్\" నుండి ప్రారంభించిన యాప్‌లను ఆటోమేటిక్‌గా ఫ్రిజ్ చేయండి. + ప్రధాన ప్రొఫైల్‌కి క్లోన్ చేయండి + అన్ని యాప్‌లను చూపించు + + ఫ్రీజ్ చేయండి + %d నిమిషాలు \ No newline at end of file From 831c3753f205c4c8c1cd5bbb1f24e56b9d52eb76 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 12 Nov 2024 17:59:32 -0500 Subject: [PATCH 355/355] i18n: Remove empty translations I don't know why Weblate decided to do this --- app/src/main/res/values-ar/strings.xml | 22 ----- app/src/main/res/values-ast/strings.xml | 11 --- app/src/main/res/values-bn/strings.xml | 98 --------------------- app/src/main/res/values-cs/strings.xml | 7 -- app/src/main/res/values-de/strings.xml | 7 -- app/src/main/res/values-el/strings.xml | 11 --- app/src/main/res/values-es/strings.xml | 11 --- app/src/main/res/values-fa/strings.xml | 11 --- app/src/main/res/values-fr/strings.xml | 11 --- app/src/main/res/values-id/strings.xml | 7 -- app/src/main/res/values-it/strings.xml | 11 --- app/src/main/res/values-iw/strings.xml | 11 --- app/src/main/res/values-ja/strings.xml | 11 --- app/src/main/res/values-ko/strings.xml | 7 -- app/src/main/res/values-nl/strings.xml | 46 ---------- app/src/main/res/values-pl/strings.xml | 11 --- app/src/main/res/values-pt-rBR/strings.xml | 11 --- app/src/main/res/values-ro/strings.xml | 11 --- app/src/main/res/values-ru-rRU/strings.xml | 7 -- app/src/main/res/values-sr/strings.xml | 7 -- app/src/main/res/values-sv/strings.xml | 11 --- app/src/main/res/values-ta/strings.xml | 99 ---------------------- app/src/main/res/values-tr/strings.xml | 11 --- app/src/main/res/values-uk/strings.xml | 90 -------------------- app/src/main/res/values-vi/strings.xml | 11 --- app/src/main/res/values-zh-rCN/strings.xml | 11 --- app/src/main/res/values-zh-rTW/strings.xml | 11 --- 27 files changed, 573 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 30a3539..9a582c5 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -84,26 +84,4 @@ \nانقر \"التالي\"، وسنوفر لك المزيد من المعلومات حول العازل، وسترشدك خلال عملية الإعداد. \n \nنقترح عليك قراءة جميع الصفحات التالية بعناية. - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-ast/strings.xml b/app/src/main/res/values-ast/strings.xml index c3a7be9..d2ed64c 100644 --- a/app/src/main/res/values-ast/strings.xml +++ b/app/src/main/res/values-ast/strings.xml @@ -110,15 +110,4 @@ \nEsto concede a Shelter una llista estensa de permisos dientro del perfil, comparable al d\'un xestor del preséu, magar que aislaos nesi perfil. Ser el xestor del perfil ye un requirimientu pa la mayoría de funciones de Shelter. \n \nDalgunes carauterístiques de Shelter puen riquir más permisos fuera del perfil de trabayu. Cuando seya\'l momentu, Shelter va pidir esos permisos per separtao al activar les carauterístiques correspondientes. - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 1f204bb..0ee310c 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -1,102 +1,4 @@ বিদায় - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 3bf763f..0483f3a 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -117,11 +117,4 @@ Shelter potřebuje oprávnění Statistiky využití pro provedení této akce. Prosím povolte oprávnění pro OBĚ DVĚ aplikace Shelteru zobrazené v dialogu poté, co stisnete \"Ok\". Pokud tak neučiníte, tato funkce nebude fungovat správně. Shelter potřebuje přístup ke všem souborům pro funkci Výměny souborů. Prosím, udělte oprávnění pro OBĚ DVĚ (Osobní / Pracovní) aplikace Shelter zobrazené v dialogu poté, co stisknete \"Ok\". Klonování nesystémových aplikací do jiného profilu není v tuto chvíli v MIUI k dispozici. Prosím, naklonujte systémový obchod s aplikacemi (např. Obchod Play) do druhého profilu a aplikace instalujte z něj. - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index ee1f5cf..6c10fd2 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -127,11 +127,4 @@ Zahlungsdienst Platzhalter (NICHT VERWENDEN) Zahlungsdienst-Platzhalter Richten Sie einen unechten NFC Zahlungsdienst im Hauptprofil ein, so dass die kontaktlosen Zahlungsoptionen unter Einstellungen - NFC aktiviert werden. So kann ein Zahlungsanbieter im Arbeitsprofil eingerichtet und gewählt werden. Damit wird ein Fehler in Android umgangen, der es unmöglich macht, im Arbeitsprofil einen Zahlungsanbieter auszuwählen, wenn kein Zahlungsdienst im Hauptprofil verfügbar ist. - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index a9fdba3..af900c5 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -112,15 +112,4 @@ Shelter [Παγωμένο] %s Το Shelter θα παγώσει αυτόματα εφαρμογές που εκκινούνται με την επιλογή \"Ξεπάγωσε και τρέξε\" την επόμενη φορά που θα κλειδώσει η οθόνη της συσκευής. - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index ad24263..7625746 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -112,15 +112,4 @@ Cuando la pantalla esta bloqueada, automáticamente suspende las aplicaciones iniciadas con \"Acceso directo a Reanudar e iniciar\". Omitir aplicaciones de fondo Acerca de - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 5e44bfa..52f63f5 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -112,15 +112,4 @@ شلتر نیازمند نمایش روی دیگر برنامه‌ها است تا شاتل فایل به درستی عمل کند. لطفا پس از زدن روی \"Ok\" در دیالوگ نمایش داده شده این دسترسی را برای هر دوی برنامه‌های شلتر فعال کنید. این دسترسی امکان راه‌اندازی سرویس‌های شاتل فایل در پس زمینه را میدهد. کپی کردن برنامه‌های سیستمی به پروفایل دیگر در حال حاضر در MIUI امکان‌پذیر نیست. لطفا اپلیکیشن فروشگاه برنامه‌های سیستم خود (مانند Play Store) را به یک پروفایل دیگر کپی کنید سپس برنامه‌ها را از آنجا نصب کنید. ادامه دادن - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 9d4ebd0..7fa9161 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -121,15 +121,4 @@ Nous sommes maintenant prêts à configurer Shelter pour vous. Veuillez d\'abord vous assurer que votre appareil n\'est pas en mode Ne pas déranger, car vous devrez cliquer sur une notification plus tard pour finaliser le processus de configuration. \n \nLorsque vous serez prêt(e), cliquez sur \"Suivant\" pour commencer le processus de configuration. - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index 6be8f8b..fc095ac 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -116,11 +116,4 @@ Rintisan Layanan Pembayaran Aktifkan layanan pembayaran NFC palsu di profil utama, sehingga opsi pembayaran nirsentuh di bawah Pengaturan - NFC diaktifkan untuk memungkinkan Anda memilih aplikasi pembayaran di dalam profil kerja. Ini mengatasi bug Android yang membuat aplikasi pembayaran di dalam profil kerja tidak dapat dipilih jika tidak ada yang tersedia di profil utama. Izinkan Interaksi Lintas Profil - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 3d9f907..20cf890 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -121,15 +121,4 @@ \nCiò darà a Shelter numerose autorizzazioni all\'interno del profilo, comparabili a quelle di un admin di dispositivo, ma pur sempre confinate nel profilo. Essere l\'amministratore del profilo è necessario perché Shelter funzioni correttamente. \n \nAlcune funzioni avanzate di Shelter potrebbero richiedere più autorizzazioni fuori dal Profilo di Lavoro. Se necessarie, Shelter le richiederà separatamente quando attivi le funzioni corrispondenti. - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index ed39b2a..db71e65 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -112,15 +112,4 @@ Shelter זקוק להרשאת סטטיסטיקות שימוש כדי לעשות זאת. אנא הפעל את ההרשאה עבור אפליקציות מקלט שתיים המוצגות בתיבת הדו-שיח לאחר לחיצה על \"אישור\". אם לא תעשה זאת, תכונה זו לא תפעל כראוי. Shelter זקוק לגישה אל כל הקבצים עבור סייר הקבצים. אנא הפעל את ההרשאה עבור יישומי מקלט שניים (אישי / עבודה) המוצגים בתיבת הדו-שיח לאחר לחיצה על \"אישור\". Shelter צריך לצייר מעל אפליקציות אחרות כדי ש-File Shuttle יפעל כהלכה. אנא הפעל את ההרשאה עבור יישומי מקלט שניים (אישי / עבודה) המוצגים בתיבת הדו-שיח לאחר לחיצה על \"אישור\". הרשאה זו משמשת להפעלת שירותי File Shuttle ברקע. - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 68218f9..88f6735 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -123,15 +123,4 @@ \nそうでなければ、あなたが途中でセットアップをキャンセルしたわけではない場合、失敗の原因は、システムが大きく変更されているか、Shelterと他の仕事用プロファイルマネージャーとの間で競合が発生していることがほとんどです。残念ながら、これに対してできることはあまりありません。 \n \nNext \"をタップして終了します。 - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 601dc13..2f2f517 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -116,11 +116,4 @@ 개인 프로필에 모의 NFC 결제 서비스를 추가하여 [설정] - [NFC]의 비접촉 결제 옵션을 활성화합니다. 개인 프로필에 설치된 결제 앱이 없을 경우 직장 프로필에 있는 앱의 비접촉 결제 서비스 사용이 불가능한 Android 상 버그를 우회하기 위한 기능입니다. 프로필 간 상호 동작 허용 모의 결제 서비스 - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 88bf4f1..a0960f1 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -84,50 +84,4 @@ Auto-bevriezen in afwachting Intellingen Verbied de toegang van het hoofdprofiel tot contacten in het werkprofiel. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index bb93c1d..90a16c2 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -121,15 +121,4 @@ \n \nBy zresetować Sheltera i zacząć od nowa możesz wyczyścić dane Sheltera w Ustawieniach. Gotowy/a? - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 7183e86..b8553dd 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -123,15 +123,4 @@ \nSe você não vê a notificação, certifique-se de que seu dispositivo não está no modo \"Não Perturbe\" e tente recuperar ela da área de notificações deslizando de cima para baixo. \n \nPara reiniciar o Shelter e começar de novo, você pode limpar os dados em Configurações do app. - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 5b46708..2580b95 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -123,15 +123,4 @@ \nÎn caz contrar, dacă nu ați anulat manual configurarea, atunci motivul eșecului este cel mai frecvent din cauza unui sistem puternic modificat sau a unui conflict între Shelter și alți manageri de profil de lucru. Din păcate, nu am putea face mare lucru în acest sens. \n \nFaceți clic pe „Next” pentru a ieși. - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index a9afb29..c63a5b0 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -127,11 +127,4 @@ Разрешить работу между профилями Чтобы получить возможность выбрать платёжное приложение внутри рабочего профиля в Настройки - NFC, включите фальшивый платёжный сервис NFC в основном профиле. Это временное решение ошибки Android, из-за которой невозможно выбрать платёжное приложение внутри рабочего профиля, если в основном профиле таких нет. Заглушка платёжных сервисов - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 52ba070..d0ec32b 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -116,11 +116,4 @@ \nНеке напредне функције Шелтера ће можда захтевати више дозвола ван радног профила. Када је потребно, Шелтер ће тражити те дозволе засебно када омогућите одговарајуће функције. Када је омогућено, моћи ћете да разгледате / прегледате / бирате / копирате датотеке у Шелтеру са главног профила и обрнуто, САМО преко УИ докумената (названих Датотеке или Документи на вашем покретачу) или апликација са подршком УИ докумената (оне добијају само привремени приступ датотекама које одаберете у УИ докумената), док се даље одржава изолација система датотека. Омогућите лажну НФЦ услугу плаћања у главном профилу, тако да опција бесконтактног плаћања у оквиру Подешавања - НФЦ постане омогућена да Вам дозволи да изаберете апликацију за плаћање унутар радног профила. Ово функционише око Андроид грешке која онемогућава одабир апликације за плаћање унутар радног профила ако ниједна није доступна у главном профилу. - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index bccc3b2..bf4fb2b 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -112,15 +112,4 @@ [Frusen] %s Klona till Shelter (arbetsprofil) Shelter måste Rita över andra appar för att File Shuttle ska fungera korrekt. Vänligen aktivera behörigheten för BÅDA TVÅ Shelter-appar som visas i dialogrutan efter att du tryckt på \"OK\". Denna behörighet används för att kunna starta File Shuttle-tjänster i bakgrunden. - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index 675c5c4..e4db719 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -3,103 +3,4 @@ நீங்கள் இப்பொழுது ஷெல்டர் ஆப் செட் பண்ண போகிறீர்கள் \n \nஇந்த ஆப் உங்கள் போனில் உள்ள வொர்க் ப்ரோஃபைல் வசதியை பயன்படுத்தி மத்த ஆப்களை ஐசலேட் பண்ணும் - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index a3b90b4..0e870fe 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -112,15 +112,4 @@ Dosya Köprüsü özelliğini kullanmak için Shelter\'ın Tüm Dosyalara erişmesi gerekiyor. Lütfen \"Tamam\" seçeneğine tıkladıktan sonra İKİ SHELTER UYGULAMASINA DA (Kişisel / İş) bu izni verin. Dosya Köprüsü özelliğinin düzgün bir şekilde çalışabilmesi için Shelter\'ın Diğer Uygulamalar Üzerinde Göster iznine ihtiyacı var. Lütfen \"Tamam\" seçeneğine tıkladıktan sonra İKİ SHELTER UYGULAMASINA DA (Kişisel / İş) bu izni verin. Söz konusu izin, Dosya Köprüsü hizmetlerini arkaplanda başlatmak için kullanılır. Bu özelliği kullanmak için Shelter\'ın Kullanım Erişimi iznine ihtiyacı var. Lütfen \"Tamam\" seçeneğine tıkladıktan sonra İKİ SHELTER UYGULAMASINA DA (Kişisel / İş) bu izni verin, aksi takdirde söz konusu özellik düzgün bir şekilde çalışmayabilir. - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 8972939..0a12b46 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -13,94 +13,4 @@ \nМи рекомендуємо вам уважно прочитати всі наступні сторінки. Ми намагаємося ініціалізувати Work Profile та налаштувати Shelter на вашому пристрої. Shelter - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 2ae7406..6bf32d3 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -112,15 +112,4 @@ Shelter cần Hiện trên các ứng dụng khác để Chia sẻ tệp hoạt động đúng. Vui lòng bật quyền đó cho CẢ HAI ứng dụng Shelter (Cá nhân / Công việc) được hiện trong hộp thoại sau khi bạn nhấn \"Ok\". Quyền này được sử dụng để khởi động các dịch vụ Chia sẻ tệp trong nền. Việc nhân bản các ứng dụng không phải hệ thống vào một hồ sơ khác hiện chưa làm được trên MIUI. Vui lòng nhân bản cửa hàng ứng dụng của hệ thống (vd: CH Play) vào hồ sơ khác đó và sau đó là cài đặt các ứng dụng từ đó. Vẫn tiếp tục - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 0e3a60b..11e7a3e 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -122,15 +122,4 @@ \n如果您没有看到通知,请确保您的设备未处于“请勿打扰”模式并尝试下拉通知中心。 \n \n要重置 Shelter 并重新开始,您可以在设置中清除 Shelter 的数据。 - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index b1295b9..f7cb99b 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -123,15 +123,4 @@ \n \n單擊下一步退出。 需要採取的行動 - - - - - - - - - - - \ No newline at end of file