Commit 38de48e0 by 羅偉育

capture

parents
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
AudiovisualRecord
\ No newline at end of file
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<codeStyleSettings language="XML">
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
<arrangement>
<rules>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:android</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:id</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>style</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>ANDROID_ATTRIBUTE_ORDER</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>.*</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
</rules>
</arrangement>
</codeStyleSettings>
</code_scheme>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<compositeConfiguration>
<compositeBuild compositeDefinitionSource="SCRIPT" />
</compositeConfiguration>
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="resolveModulePerSourceSet" value="false" />
<option name="testRunner" value="PLATFORM" />
</GradleProjectSettings>
</option>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
</set>
</option>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
defaultConfig {
applicationId "com.example.audiovisualrecord"
minSdkVersion 24
targetSdkVersion 29
versionCode 1
versionName "1.0.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'com.google.android.material:material:1.2.0-alpha06'
implementation 'io.reactivex.rxjava2:rxjava:2.0.7'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation 'com.squareup.okhttp3:okhttp:3.5.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.6.0'
// retrofit
implementation 'com.squareup.retrofit2:retrofit:2.2.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
implementation 'com.google.code.gson:gson:2.7'
implementation 'com.github.bumptech.glide:glide:3.6.1'
// FFmpeg
implementation 'com.arthenica:mobile-ffmpeg-full:4.3.2'
}
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
package com.example.audiovisualrecord;
import android.content.Context;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
assertEquals("com.example.audiovisualrecord", appContext.getPackageName());
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.audiovisualrecord">
<uses-feature
android:name="android.hardware.camera"
android:required="true" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/audiovisualrecord"
android:label="@string/app_name"
android:roundIcon="@mipmap/audiovisualrecord"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<activity android:name=".ui.login.LoginActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ui.main.MainActivity"
android:screenOrientation="portrait"/>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
</application>
</manifest>
\ No newline at end of file
package com.example.audiovisualrecord;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.DocumentsContract;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.NonNull;
import java.io.File;
import java.util.Locale;
public class FileUtil {
/**
* 根据Uri获取图片绝对路径
* @param context context
* @param uri uri
*/
public static String getFileAbsolutePath(Context context, Uri uri) {
if (context == null || uri == null) return null;
// DocumentProvider
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && DocumentsContract.isDocumentUri(context, uri)) {
if (isExternalStorageDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
if ("primary".equalsIgnoreCase(type)) {
return Environment.getExternalStorageDirectory() + "/" + split[1];
}else if ("home".equalsIgnoreCase(type)) {
return Environment.getExternalStorageDirectory() + "/documents/" + split[1];
}
} else if (isDownloadsDocument(uri)) {
// DownloadsProvider
final String id = DocumentsContract.getDocumentId(uri);
if (TextUtils.isEmpty(id)) {
return null;
}
if (id.startsWith("raw:")) {
return id.substring(4);
}
String[] contentUriPrefixesToTry = new String[]{
"content://downloads/public_downloads",
"content://downloads/my_downloads",
"content://downloads/all_downloads"
};
for (String contentUriPrefix : contentUriPrefixesToTry) {
try {
Uri contentUri = ContentUris.withAppendedId(Uri.parse(contentUriPrefix), Long.valueOf(id));
String path = getDataColumn(context, contentUri, null, null);
if (path != null) {
return path;
}
} catch (Exception ignore) {
}
}
try {
String path = getDataColumn(context, uri, null, null);
if (path != null) {
return path;
}
} catch (Exception ignore) {
}
// path could not be retrieved using ContentResolver, therefore copy file to accessible cache using streams
return null;
} else if (isMediaDocument(uri)) {
// MediaProvider
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
Uri contentUri;
switch (type.toLowerCase(Locale.ENGLISH)) {
case "image":
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
break;
case "video":
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
break;
case "audio":
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
break;
default:
contentUri = MediaStore.Files.getContentUri("external");
break;
}
final String selection = MediaStore.MediaColumns._ID +"=?";
final String[] selectionArgs = new String[]{split[1]};
return getDataColumn(context, contentUri, selection, selectionArgs);
}
} else if (ContentResolver.SCHEME_CONTENT.equalsIgnoreCase(uri.getScheme())) {
// MediaStore (and general)
// Return the remote address
if (isGooglePhotosUri(uri)) {
return uri.getLastPathSegment();
}
return getDataColumn(context, uri, null, null);
} else if (ContentResolver.SCHEME_FILE.equalsIgnoreCase(uri.getScheme())) {
// File
return uri.getPath();
}
return null;
}
/**
* 通过游标获取当前文件路径
* @param context context
* @param uri uri
* @param selection selection
* @param selectionArgs selectionArgs
* @return 路径,未找到返回null
*/
public static String getDataColumn(Context context, @NonNull Uri uri, String selection, String[] selectionArgs) {
Cursor cursor = null;
String column = MediaStore.Images.Media.DATA;
String[] projection = {column};
try {
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
if (cursor != null && cursor.moveToFirst()) {
int index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(index);
}
} catch (Exception ignore) {
Log.e("error", ignore.getMessage());
} finally {
if (cursor != null)
cursor.close();
}
return null;
}
//檔案名
public static String fileName(String path){
if( path == null || path.isEmpty() ) return "";
File file = new File(path);
if( !file.exists() || !file.isFile() ) {
return "";
}
String filename = file.getName();
// String ext = FileKit.getFileExt(filename);
// if( !ext.equalsIgnoreCase(".csv") ){
// return "";
// }
return filename;
}
public static boolean isExternalStorageDocument(Uri uri) {
return "com.android.externalstorage.documents".equals(uri.getAuthority());
}
public static boolean isDownloadsDocument(Uri uri) {
return "com.android.providers.downloads.documents".equals(uri.getAuthority());
}
public static boolean isMediaDocument(Uri uri) {
return "com.android.providers.media.documents".equals(uri.getAuthority());
}
public static boolean isGooglePhotosUri(Uri uri) {
return "com.google.android.apps.photos.content".equals(uri.getAuthority());
}
}
package com.example.audiovisualrecord;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.graphics.Bitmap;
import android.net.Uri;
import android.provider.MediaStore;
import android.util.Log;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import static android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
public class HDMediaStore {
public static String insertImage(ContentResolver cr, Bitmap source,
String title, String description) {
Calendar calendar = Calendar.getInstance();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_hhmm");
String timeName = dateFormat.format(calendar.getTime());
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, title);
values.put(MediaStore.MediaColumns.DISPLAY_NAME, timeName);
values.put(MediaStore.MediaColumns.BUCKET_DISPLAY_NAME, timeName);
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpg");
Uri url = null;
String stringUrl = null; /* value to be returned */
try {
url = cr.insert(EXTERNAL_CONTENT_URI, values);
if (source != null) {
OutputStream imageOut = cr.openOutputStream(url);
try {
source.compress(Bitmap.CompressFormat.JPEG, 100, imageOut);
} finally {
imageOut.close();
}
long id = ContentUris.parseId(url);
// Wait until MINI_KIND thumbnail is generated.
} else {
Log.e("kkk", "Failed to create thumbnail, removing original");
cr.delete(url, null, null);
url = null;
}
} catch (Exception e) {
Log.e("kkk", "Failed to insert image", e);
if (url != null) {
cr.delete(url, null, null);
url = null;
}
}
if (url != null) {
stringUrl = url.toString();
}
return stringUrl;
}
}
package com.example.audiovisualrecord.base;
/**
* Created by 5*N on 2017/12/22
*/
public interface BaseAttacher<V extends BaseView> {
void onAttached(V view);
void onDetached();
}
package com.example.audiovisualrecord.base;
import android.app.ProgressDialog;
import android.content.ContentUris;
import android.content.Context;
import android.content.DialogInterface;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.DocumentsContract;
import android.provider.MediaStore;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.StringRes;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import com.example.audiovisualrecord.utils.ToastCreator;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;
/**
* Created by 5*N on 2018/1/12
*/
public abstract class BaseFragment extends Fragment implements BaseView {
private ProgressDialog mProgressDialog;
private Calendar mCalendar = Calendar.getInstance();
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void showProgressDialog(@StringRes int text) {
dismissProgressDialog();
mProgressDialog = new ProgressDialog(getActivity());
mProgressDialog.setMessage(getActivity().getResources().getString(text));
mProgressDialog.setCancelable(false);
mProgressDialog.setCanceledOnTouchOutside(false);
mProgressDialog.show();
}
@Override
public void dismissProgressDialog() {
if (mProgressDialog != null && mProgressDialog.isShowing()) {
mProgressDialog.cancel();
}
}
@Override
public String getResourceString(@StringRes int text) {
return getResources().getString(text);
}
@Override
public String getTodayTime() {
String dateformat = "yyyyMMdd";
Calendar mCal = Calendar.getInstance();
SimpleDateFormat df = new SimpleDateFormat(dateformat);
String today = df.format(mCal.getTime());
return today;
}
@Override
public void showToast(@StringRes int text) {
ToastCreator.makeText(getActivity(), text, Toast.LENGTH_SHORT);
}
@Override
public void showToast(String text) {
ToastCreator.makeText(getActivity(), text, Toast.LENGTH_SHORT);
}
@Override
public void showItemDialog(List<String> list, DialogInterface.OnClickListener onClickListener) {
new AlertDialog.Builder(getActivity())
.setItems(list.toArray(new String[list.size()]), onClickListener)
.create()
.show();
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public String getPath(Uri uri) {
// check here to KITKAT or new version
final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
// DocumentProvider
if (isKitKat && DocumentsContract.isDocumentUri(getActivity(), uri))
{
// ExternalStorageProvider
if (isExternalStorageDocument(uri))
{
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
if ("primary".equalsIgnoreCase(type))
{
return Environment.getExternalStorageDirectory() + "/"
+ split[1];
}
}
// DownloadsProvider
else if (isDownloadsDocument(uri))
{
final String id = DocumentsContract.getDocumentId(uri);
final Uri contentUri = ContentUris.withAppendedId(
Uri.parse("content://downloads/public_downloads"),
Long.valueOf(id));
return getDataColumn(getActivity(), contentUri, null, null);
}
// MediaProvider
else if (isMediaDocument(uri))
{
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
Uri contentUri = null;
if ("image".equals(type))
{
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
}
else if ("video".equals(type))
{
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
}
else if ("audio".equals(type))
{
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}
final String selection = "_id=?";
final String[] selectionArgs = new String[] { split[1] };
return getDataColumn(getActivity(), contentUri, selection,
selectionArgs);
}
}
// MediaStore (and general)
else if ("content".equalsIgnoreCase(uri.getScheme()))
{
// Return the remote address
if (isGooglePhotosUri(uri))
return uri.getLastPathSegment();
return getDataColumn(getActivity(), uri, null, null);
}
// File
else if ("file".equalsIgnoreCase(uri.getScheme()))
{
return uri.getPath();
}
return null;
}
/**
* Get the value of the data column for this Uri. This is useful for
* MediaStore Uris, and other file-based ContentProviders.
*
* @param context - The context.
* @param uri - The Uri to query.
* @param selection - (Optional) Filter used in the query.
* @param selectionArgs - (Optional) Selection arguments used in the query.
* @return - The value of the _data column, which is typically a file path.
*/
private static String getDataColumn(Context context, Uri uri,
String selection, String[] selectionArgs)
{
Cursor cursor = null;
final String column = "_data";
final String[] projection = { column };
try
{
cursor = context.getContentResolver().query(uri, projection,
selection, selectionArgs, null);
if (cursor != null && cursor.moveToFirst())
{
final int index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(index);
}
}
finally
{
if (cursor != null)
cursor.close();
}
return null;
}
/**
* @param uri - The Uri to check.
* @return - Whether the Uri authority is ExternalStorageProvider.
*/
private static boolean isExternalStorageDocument(Uri uri)
{
return "com.android.externalstorage.documents".equals(uri.getAuthority());
}
/**
* @param uri - The Uri to check.
* @return - Whether the Uri authority is DownloadsProvider.
*/
private static boolean isDownloadsDocument(Uri uri)
{
return "com.android.providers.downloads.documents".equals(uri.getAuthority());
}
/**
* @param uri - The Uri to check.
* @return - Whether the Uri authority is MediaProvider.
*/
private static boolean isMediaDocument(Uri uri)
{
return "com.android.providers.media.documents".equals(uri.getAuthority());
}
/**
* @param uri - The Uri to check.
* @return - Whether the Uri authority is Google Photos.
*/
private static boolean isGooglePhotosUri(Uri uri)
{
return "com.google.android.apps.photos.content".equals(uri.getAuthority());
}
}
package com.example.audiovisualrecord.base;
import com.example.audiovisualrecord.utils.api.ApiService;
import com.example.audiovisualrecord.utils.api.ErpAPI;
import com.example.audiovisualrecord.utils.rxjava.SchedulerProvider;
import io.reactivex.disposables.CompositeDisposable;
public class BasePresenter<V extends BaseView> implements BaseAttacher<V> {
private V mView;
private ApiService api;
private ErpAPI erpAPI;
private SchedulerProvider schedulerProvider;
private CompositeDisposable compositeDisposable;
public BasePresenter(ApiService api,
ErpAPI erpAPI,
SchedulerProvider schedulerProvider,
CompositeDisposable compositeDisposable) {
this.api = api;
this.erpAPI=erpAPI;
this.schedulerProvider = schedulerProvider;
this.compositeDisposable = compositeDisposable;
}
public V getView() {
return mView;
}
@Override
public void onAttached(V view) {
mView = view;
}
@Override
public void onDetached() {
mView = null;
}
public ApiService getApiService() {
return api;
}
// public ErpAPI getErpAPI(){
// return erpAPI;
// }
public SchedulerProvider getSchedulerProvider() {
return schedulerProvider;
}
public CompositeDisposable getCompositeDisposable() {
return compositeDisposable;
}
}
package com.example.audiovisualrecord.base;
import android.app.DatePickerDialog;
import android.content.DialogInterface;
import android.net.Uri;
import androidx.annotation.StringRes;
import java.util.List;
/**
* Created by 5*N on 2017/12/22
*/
public interface BaseView {
void init();
void showItemDialog(List<String> list, DialogInterface.OnClickListener onClickListener);
void showProgressDialog(@StringRes int text);
void showProgressDialog(String text);
void dismissProgressDialog();
void showDialogCaveatMessage(String message);
void showDialogMessage(String message);
void showDialogMessage(String title, String message);
void showDialogCaveatMessage(String title, String message);
void showDatePickerDialog(DatePickerDialog.OnDateSetListener onDateSetListener);
void showSelectDialog(String text, DialogInterface.OnClickListener onClickListener);
String getResourceString(@StringRes int text);
String getTodayTime();
void showToast(String text);
void showToast(@StringRes int text);
String getPath(Uri uri);
}
package com.example.audiovisualrecord.ui.chooseitem;
import java.io.Serializable;
public class ChooseDeviceItemData implements Serializable {
private String recordDate="";
private String factoryAreaName ="";
// private String maintenancePlantCompanyId="";
private String factoryAreaId ="";
private String company="";
private String companyId="";
private String productionPlantId="";
private String factoryClassCode ="";
private String factoryClass ="";
private String deviceCategory="";
private String deviceCategryId="";
private String shootType ="";
private String deciceId="";
private String deciceName="";
private String keynote="";
private String filePath="";
private String uploadEmployees="";
private boolean backgroundChange=false;
private boolean checkEndItem=false;
// public String getMaintenancePlantCompanyId() {
// return maintenancePlantCompanyId;
// }
//
// public void setMaintenancePlantCompanyId(String maintenancePlantCompanyId) {
// this.maintenancePlantCompanyId = maintenancePlantCompanyId;
// }
public String getFactoryAreaId() {
return factoryAreaId;
}
public void setFactoryAreaId(String factoryAreaId) {
this.factoryAreaId = factoryAreaId;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getCompanyId() {
return companyId;
}
public void setCompanyId(String companyId) {
this.companyId = companyId;
}
public String getProductionPlantId() {
return productionPlantId;
}
public void setProductionPlantId(String productionPlantId) {
this.productionPlantId = productionPlantId;
}
public String getShootType() {
return shootType;
}
public void setShootType(String shootType) {
this.shootType = shootType;
}
public String getDeviceCategryId() {
return deviceCategryId;
}
public void setDeviceCategryId(String deviceCategryId) {
this.deviceCategryId = deviceCategryId;
}
public String getDeciceName() {
return deciceName;
}
public void setDeciceName(String deciceName) {
this.deciceName = deciceName;
}
public boolean isBackgroundChange() {
return backgroundChange;
}
public String getRecordDate() {
return recordDate;
}
public void setRecordDate(String recordDate) {
this.recordDate = recordDate;
}
public String getFactoryAreaName() {
return factoryAreaName;
}
public void setFactoryAreaName(String factoryAreaName) {
this.factoryAreaName = factoryAreaName;
}
public String getFactoryClassCode() {
return factoryClassCode;
}
public void setFactoryClassCode(String factoryClassCode) {
this.factoryClassCode = factoryClassCode;
}
public String getFactoryClass() {
return factoryClass;
}
public void setFactoryClass(String factoryClass) {
this.factoryClass = factoryClass;
}
public String getDeviceCategory() {
return deviceCategory;
}
public void setDeviceCategory(String deviceCategory) {
this.deviceCategory = deviceCategory;
}
public String getDeciceId() {
return deciceId;
}
public void setDeciceId(String deciceId) {
this.deciceId = deciceId;
}
public String getKeynote() {
return keynote;
}
public void setKeynote(String keynote) {
this.keynote = keynote;
}
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
public String getUploadEmployees() {
return uploadEmployees;
}
public void setUploadEmployees(String uploadEmployees) {
this.uploadEmployees = uploadEmployees;
}
public boolean getBackgroundChange() {
return backgroundChange;
}
public void setBackgroundChange(boolean backgroundChange) {
this.backgroundChange = backgroundChange;
}
public boolean isCheckEndItem() {
return checkEndItem;
}
public void setCheckEndItem(boolean checkEndItem) {
this.checkEndItem = checkEndItem;
}
}
package com.example.audiovisualrecord.ui.login;
import android.Manifest;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import com.example.audiovisualrecord.ui.main.MainActivity;
import com.example.audiovisualrecord.R;
import com.example.audiovisualrecord.base.BaseActivity;
public class LoginActivity extends BaseActivity implements LoginContract.View, View.OnClickListener {
EditText editAccount, editPassword;
Button btnLogin;
private LoginPresenter presenter;
// LoginContract.Presenter<LoginContract.View> mPresenter = new LoginContract.Presenter<LoginContract.View>;
private static final int REQUEST_PERMISSIONS_CODE = 20200410;
private String[] permissions = {
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.CAMERA};
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
init();
requestPermissions(permissions, REQUEST_PERMISSIONS_CODE);
presenter = new LoginPresenter(this);
}
@Override
protected void onPause() {
super.onPause();
btnLogin.setEnabled(true);
}
@Override
public void init() {
editAccount = findViewById(R.id.edit_account);
editPassword = findViewById(R.id.edit_password);
btnLogin = findViewById(R.id.btn_login);
btnLogin.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_login:
btnLogin.setEnabled(false);
showProgressDialog("登入中");
if (onCheckUserisEmpty()) {
presenter.onLogin(editAccount.getText().toString(), editPassword.getText().toString());
} else {
dismissProgressDialog();
btnLogin.setEnabled(true);
}
break;
}
}
private boolean onCheckUserisEmpty() {
if ("".equals(editAccount.getText().toString())) {
showDialogMessage(getResourceString(R.string.login_account_hint));
return false;
}
if ("".equals(editPassword.getText().toString())) {
showDialogMessage(getResourceString(R.string.login_password_hint));
return false;
}
return true;
}
@Override
public void onCompleteLogin(String token) {
dismissProgressDialog();
Intent intent = new Intent(this, MainActivity.class);
Bundle bag = new Bundle();
bag.putString("token", token);
intent.putExtras(bag);
startActivity(intent);
}
@Override
public void setButtonEnable(Boolean boo) {
btnLogin.setEnabled(boo);
}
}
\ No newline at end of file
package com.example.audiovisualrecord.ui.login;
import com.example.audiovisualrecord.base.BaseAttacher;
import com.example.audiovisualrecord.base.BaseView;
public interface LoginContract {
interface View extends BaseView {
void onCompleteLogin(String token);
void setButtonEnable(Boolean boo);
}
interface Presenter<V extends View> extends BaseAttacher<V> {
void onLogin(String account,String password);
}
}
package com.example.audiovisualrecord.ui.login;
import android.content.Context;
import android.util.Log;
import com.example.audiovisualrecord.R;
import com.example.audiovisualrecord.utils.api.ApiService;
import com.example.audiovisualrecord.utils.api.HttpMethods;
import com.example.audiovisualrecord.utils.api.apidata.login.LoginRequest;
import com.example.audiovisualrecord.utils.api.apidata.login.LoginResponse;
import com.example.audiovisualrecord.utils.rxjava.SchedulerProvider;
import com.example.audiovisualrecord.utils.rxjava.SchedulerProviderImp;
import com.example.audiovisualrecord.utils.sharepreferences.LoginPreferences;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.observers.DisposableObserver;
public class LoginPresenter<V extends LoginContract.View> implements LoginContract.Presenter<V> {
// LoginPreferences loginPreferences;
private V view;
private String LOGIN_AUTHORIZED_ID = "06cdae9b-fa20-497d-8207-0eb73582623b";
private ApiService api;
SchedulerProviderImp schedulerProviderImp = new SchedulerProviderImp();
private CompositeDisposable compositeDisposable;
public LoginPresenter(V view) {
this.view = view;
api = HttpMethods.getInstance().getApi();
compositeDisposable = new CompositeDisposable();
}
@Override
public void onLogin(String account, String password) {
String url = view.getResourceString(R.string.api_on_Login);
// LoginRequest mLoginRequest = new LoginRequest(LOGIN_AUTHORIZED_ID, "N000158385", "781122222");
LoginRequest mLoginRequest = new LoginRequest(LOGIN_AUTHORIZED_ID, account, password);
compositeDisposable.add(api.onLogin(url, mLoginRequest)
.subscribeOn(schedulerProviderImp.io())
.observeOn(schedulerProviderImp.ui())
.subscribeWith(new DisposableObserver<LoginResponse>() {
@Override
public void onNext(LoginResponse loginResponse) {
if ("True".equals(loginResponse.getmResult())) {
view.onCompleteLogin(loginResponse.getmMsg());
} else {
view.dismissProgressDialog();
view.showDialogCaveatMessage("登入失敗");
}
}
@Override
public void onError(Throwable e) {
Log.e("err", e.getMessage());
view.dismissProgressDialog();
if(e.getMessage().contains("No address associated with hostname"))
{
view.showDialogCaveatMessage("請檢查網路狀態");
}
view.showDialogCaveatMessage("登入失敗");
view.setButtonEnable(true);
}
@Override
public void onComplete() {
}
})
);
}
@Override
public void onAttached(V view) {
}
@Override
public void onDetached() {
}
}
\ No newline at end of file
package com.example.audiovisualrecord.ui.main;
import com.example.audiovisualrecord.base.BaseView;
import com.example.audiovisualrecord.utils.api.apidata.searchco.COResponse;
import com.example.audiovisualrecord.utils.api.apidata.searchtype.TYPEResponse;
import com.example.audiovisualrecord.utils.api.searchshift.SHIFTResponse;
import com.example.audiovisualrecord.utils.api.searchpz.PZResponse;
import com.example.audiovisualrecord.utils.api.searchdp.DPResponse;
import java.util.ArrayList;
import java.util.List;
public interface MainContract {
interface View extends BaseView {
void setCOData(List<COResponse> adapterData);
void setPZData(List<PZResponse> adapterData);
void setDPNMData(List<DPResponse> adapterData);
void setEQKDData(List<SHIFTResponse> adapterData);
void setTYPEData(List<TYPEResponse> adapterData);
void onUploadFile(ArrayList<String> uriList, String type,String sid);
}
interface Presenter<V extends MainContract.View> {
void onGetComData();
void onGetPZData();
void onGetDPData(String CO, String PZ);
void onGetSHIFTData(String CO, String PMFCT);
void segVideo(String path,String name);
void onGetTYPEData(String CO,String PMFCT);
void onGetSid(ArrayList<String> uriList, String type);
void onLogoutSid(String sid);
String onJudgmentPath(String pathCompany,String pathFactoryArea,String pathFactoryClass,
String pathClass,String pathShootType);
}
}
\ No newline at end of file
package com.example.audiovisualrecord.ui.main;
import com.example.audiovisualrecord.utils.api.apidata.searchco.COResponse;
import com.example.audiovisualrecord.utils.api.apidata.searchtype.TYPEResponse;
import com.example.audiovisualrecord.utils.api.searchshift.SHIFTResponse;
import com.example.audiovisualrecord.utils.api.searchpz.PZResponse;
import com.example.audiovisualrecord.utils.api.searchdp.DPResponse;
import java.util.List;
public class MainData {
private List<COResponse> mCODataList; //公司代碼
private List<PZResponse> mPZDataList; //廠區代碼
private List<DPResponse> mDPDataList; //廠課代碼
private List<SHIFTResponse> mSHIFTDataList; //班別代碼
private List<TYPEResponse> mTYPEDataList; //錄影類型
private String MSidData;
public List<COResponse> getmCODataList() {
return mCODataList;
}
public List<PZResponse> getmPZDataList() {
return mPZDataList;
}
public void setmPZDataList(List<PZResponse> mPZDataList) {
this.mPZDataList = mPZDataList;
}
public void setmCODataList(List<COResponse> mCODataList) {
this.mCODataList = mCODataList;
}
public List<DPResponse> getmDPDataList() {
return mDPDataList;
}
public void setmDPDataList(List<DPResponse> mDPDataList) {
this.mDPDataList = mDPDataList;
}
public List<SHIFTResponse> getmSHIFTDataList() {
return mSHIFTDataList;
}
public void setmSHIFTDataList(List<SHIFTResponse> mSHIFTDataList) {
this.mSHIFTDataList = mSHIFTDataList;
}
public List<TYPEResponse> getmTYPEDataList() {
return mTYPEDataList;
}
public void setmTYPEDataList(List<TYPEResponse> mTYPEDataList) {
this.mTYPEDataList = mTYPEDataList;
}
public String getMSidData() {
return MSidData;
}
public void setMSidData(String MSidData) {
this.MSidData = MSidData;
}
}
package com.example.audiovisualrecord.utils;
import android.content.Context;
import android.widget.Toast;
public class ToastCreator {
private static Toast toast;
public static void makeText(final Context context,
final String text,
final int duration) {
if (toast == null) {
toast = Toast.makeText(context, text, duration);
} else {
toast.setText(text);
toast.setDuration(duration);
}
toast.show();
}
public static void makeText(final Context context,
final int resId,
final int duration) {
String text = context.getResources().getString(resId);
if (toast == null) {
toast = Toast.makeText(context, text, duration);
} else {
toast.setText(text);
toast.setDuration(duration);
}
toast.show();
}
}
package com.example.audiovisualrecord.utils.api;
import com.example.audiovisualrecord.utils.api.apidata.logoutsid.LogoutSidRequest;
import com.example.audiovisualrecord.utils.api.apidata.searchco.CORequest;
import com.example.audiovisualrecord.utils.api.apidata.searchco.COResultList;
import com.example.audiovisualrecord.utils.api.apidata.login.LoginRequest;
import com.example.audiovisualrecord.utils.api.apidata.login.LoginResponse;
import com.example.audiovisualrecord.utils.api.apidata.logoutsid.LogoutSidResponse;
import com.example.audiovisualrecord.utils.api.apidata.searchsid.SIDDataList;
import com.example.audiovisualrecord.utils.api.apidata.searchtype.TYPERequest;
import com.example.audiovisualrecord.utils.api.apidata.searchtype.TYPEResultList;
import com.example.audiovisualrecord.utils.api.searchshift.SHIFTRequest;
import com.example.audiovisualrecord.utils.api.searchshift.SHIFTResultList;
import com.example.audiovisualrecord.utils.api.searchpz.PZRequest;
import com.example.audiovisualrecord.utils.api.searchpz.PZResultList;
import com.example.audiovisualrecord.utils.api.searchdp.DPRequest;
import com.example.audiovisualrecord.utils.api.searchdp.DPResultList;
import io.reactivex.Observable;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Url;
public interface ApiService {
@POST
Observable<COResultList> getCO(@Url String url, @Body CORequest mCORequest);
@POST
Observable<PZResultList> getPZ(@Url String url, @Body PZRequest mPZRequest);
@POST
Observable<DPResultList> getDP(@Url String url, @Body DPRequest mDPRequest);
@POST
Observable<SHIFTResultList> getSHIFT(@Url String url, @Body SHIFTRequest mSHIFTRequest);
@POST
Observable<TYPEResultList>getTYPE(@Url String url, @Body TYPERequest mTypeRequest);
@POST
Observable<LoginResponse> onLogin(@Url String url, @Body LoginRequest mLoginRequest);
@GET
Observable<SIDDataList> getSID(@Url String url);
@POST
Observable<LogoutSidResponse> onLogoutSid(@Url String url , @Body LogoutSidRequest mLogoutSidRequest);
}
package com.example.audiovisualrecord.utils.api;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class DataResponse {
@SerializedName("title")
@Expose
private String titlewefwefew;
@SerializedName("content")
@Expose
private String content;
@SerializedName("poster")
@Expose
private String poster;
@SerializedName("url")
@Expose
private String url;
public String getTitle() {
return titlewefwefew;
}
public void setTitle(String title) {
this.titlewefwefew = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getPoster() {
return poster;
}
public void setPoster(String poster) {
this.poster = poster;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
package com.example.audiovisualrecord.utils.api;
import java.util.List;
import io.reactivex.Observable;
import retrofit2.http.GET;
public interface ErpAPI {
@GET("xiaohua.json")
Observable<List<DataResponse>> getData();
}
package com.example.audiovisualrecord.utils.api;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
public class HttpMethods {
private static final String BASE_URL = "https://cloud.fpcetg.com.tw/FPC/API/MTN/API_MTN/MTN/";
private static final int TIME_OUT=4;
private Retrofit retrofit;
private ApiService apiService;
private HttpMethods() {
/**
* 构造函数私有化
* 并在构造函数中进行retrofit的初始化
*/
OkHttpClient client=new OkHttpClient();
client.newBuilder().connectTimeout(TIME_OUT, TimeUnit.SECONDS);
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
apiService=retrofit.create(ApiService.class);
}
private static class sinalInstance {
public static final HttpMethods instance = new HttpMethods();
}
public static HttpMethods getInstance(){
return sinalInstance.instance;
}
public ApiService getApi(){
return retrofit.create(ApiService.class);
}
}
package com.example.audiovisualrecord.utils.api.apidata.login;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class LoginRequest {
@SerializedName("AuthorizedId")
@Expose
private String authorizedId;
@SerializedName("IdNo")
@Expose
private String mIdNo;
@SerializedName("Password")
@Expose
private String mPassword;
public LoginRequest(String authorizedId, String account, String password) {
this.authorizedId=authorizedId;
this.mIdNo =account;
this.mPassword=password;
}
public String getAuthorizedId() {
return authorizedId;
}
public void setAuthorizedId(String authorizedId) {
this.authorizedId = authorizedId;
}
public String getmIdNo() {
return mIdNo;
}
public void setmIdNo(String mIdNo) {
this.mIdNo = mIdNo;
}
public String getmPassword() {
return mPassword;
}
public void setmPassword(String mPassword) {
this.mPassword = mPassword;
}
}
package com.example.audiovisualrecord.utils.api.apidata.login;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class LoginResponse {
@SerializedName("Result")
@Expose
private String mResult;
@SerializedName("Msg")
@Expose
private String mMsg;
// @SerializedName("Token")
// @Expose
// private String mToken;
// @SerializedName("ErrMsg")
// @Expose
// private String mErrMsg;
public String getmResult() {
return mResult;
}
public void setmResult(String mResult) {
this.mResult = mResult;
}
// public String getmToken() {
// return mToken;
// }
//
// public void setmToken(String mToken) {
// this.mToken = mToken;
// }
//
// public String getmErrMsg() {
// return mErrMsg;
// }
//
// public void setmErrMsg(String mErrMsg) {
// this.mErrMsg = mErrMsg;
// }
public String getmMsg() {
return mMsg;
}
public void setmMsg(String mMsg) {
this.mMsg = mMsg;
}
}
package com.example.audiovisualrecord.utils.api.apidata.logoutsid;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class LogoutSidRequest {
@SerializedName("sid")
@Expose
private String sid;
public LogoutSidRequest(String sid) {
this.sid = sid;
}
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
}
package com.example.audiovisualrecord.utils.api.apidata.logoutsid;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class LogoutSidResponse {
@SerializedName("success")
@Expose
private String success;
public String getSuccess() {
return success;
}
public void setSuccess(String success) {
this.success = success;
}
}
package com.example.audiovisualrecord.utils.api.apidata.searchco;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class CORequest {
@SerializedName("AuthorizedId")
@Expose
private String authorizedId;
@SerializedName("IdNo")
@Expose
private String idNo;
public CORequest(String authorizedId, String idNo) {
this.authorizedId=authorizedId;
this.idNo=idNo;
}
public String getAuthorizedId() {
return authorizedId;
}
public void setAuthorizedId(String authorizedId) {
this.authorizedId = authorizedId;
}
public String getIdNo() {
return idNo;
}
public void setIdNo(String idNo) {
this.idNo = idNo;
}
}
package com.example.audiovisualrecord.utils.api.apidata.searchco;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class COResponse {
@SerializedName("CO")
@Expose
private String cO;
@SerializedName("CONM")
@Expose
private String cONM;
public String getcO() {
return cO;
}
public void setcO(String cO) {
this.cO = cO;
}
public String getcONM() {
return cONM;
}
public void setcONM(String cONM) {
this.cONM = cONM;
}
}
package com.example.audiovisualrecord.utils.api.apidata.searchco;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class COResultList {
@SerializedName("ResultList")
@Expose
private List<COResponse> cOResponseList;
public List<COResponse> getcOResponseList() {
return cOResponseList;
}
public void setcOResponseList(List<COResponse> cOResponseList) {
this.cOResponseList = cOResponseList;
}
}
package com.example.audiovisualrecord.utils.api.apidata.searchsid;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class SIDDataList {
@SerializedName("data")
@Expose
private getSID sIdDataList;
@SerializedName("success")
@Expose
private java.lang.String success;
public getSID getsIdDataList() {
return sIdDataList;
}
public void setsIdDataList(getSID sIdDataList) {
this.sIdDataList = sIdDataList;
}
public java.lang.String getSuccess() {
return success;
}
public void setSuccess(java.lang.String success) {
this.success = success;
}
}
package com.example.audiovisualrecord.utils.api.apidata.searchsid;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class getSID {
@SerializedName("sid")
@Expose
private java.lang.String sid;
public java.lang.String getSid() {
return sid;
}
public void setSid(java.lang.String sid) {
this.sid = sid;
}
}
package com.example.audiovisualrecord.utils.api.apidata.searchtype;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class TYPERequest {
@SerializedName("AuthorizedId")
@Expose
private String authorizedId;
@SerializedName("IdNo")
@Expose
private String idNo;
@SerializedName("CO")
@Expose
private String mCO;
@SerializedName("PMFCT")
@Expose
private String mPMFCT;
public TYPERequest(String authorizedId, String idNo, String mCO, String mPMFCT) {
this.authorizedId=authorizedId;
this.idNo=idNo;
this.mCO=mCO;
this.mPMFCT=mPMFCT;
}
public String getAuthorizedId() {
return authorizedId;
}
public void setAuthorizedId(String authorizedId) {
this.authorizedId = authorizedId;
}
public String getIdNo() {
return idNo;
}
public void setIdNo(String idNo) {
this.idNo = idNo;
}
public String getmCO() {
return mCO;
}
public void setmCO(String mCO) {
this.mCO = mCO;
}
public String getmPMFCT() {
return mPMFCT;
}
public void setmPMFCT(String mPMFCT) {
this.mPMFCT = mPMFCT;
}
}
package com.example.audiovisualrecord.utils.api.apidata.searchtype;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class TYPEResponse {
@SerializedName("Type")
@Expose
private String mType;
public String getmType() {
return mType;
}
public void setmType(String mType) {
this.mType = mType;
}
}
package com.example.audiovisualrecord.utils.api.apidata.searchtype;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class TYPEResultList {
@SerializedName("ResultList")
@Expose
private List<TYPEResponse> mTYPEResponseList;
public List<TYPEResponse> getmTYPEResponseList() {
return mTYPEResponseList;
}
public void setmTYPEResponseList(List<TYPEResponse> mTYPEResponseList) {
this.mTYPEResponseList = mTYPEResponseList;
}
}
package com.example.audiovisualrecord.utils.api.searchdp;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class DPRequest {
@SerializedName("AuthorizedId")
@Expose
private String authorizedId;
@SerializedName("IdNo")
@Expose
private String idNo;
@SerializedName("CO")
@Expose
private String mCO;
@SerializedName("PZ")
@Expose
private String mPZ;
public DPRequest(String authorizedId, String idNo, String mCO, String mPZ) {
this.authorizedId=authorizedId;
this.idNo=idNo;
this.mCO = mCO;
this.mPZ = mPZ;
}
public String getAuthorizedId() {
return authorizedId;
}
public void setAuthorizedId(String authorizedId) {
this.authorizedId = authorizedId;
}
public String getIdNo() {
return idNo;
}
public void setIdNo(String idNo) {
this.idNo = idNo;
}
public String getmCO() {
return mCO;
}
public void setmCO(String mCO) {
this.mCO = mCO;
}
public String getmPZ() {
return mPZ;
}
public void setmPZ(String mPZ) {
this.mPZ = mPZ;
}
}
package com.example.audiovisualrecord.utils.api.searchdp;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class DPResponse {
@SerializedName("CO")
@Expose
private String mCO;
@SerializedName("PZ")
@Expose
private String mPZ;
@SerializedName("PMFCT")
@Expose
private String mPMFCT;
@SerializedName("DP")
@Expose
private String mDP;
@SerializedName("DPNM")
@Expose
private String mDPNM;
public String getmPZ() {
return mPZ;
}
public void setmPZ(String mPZ) {
this.mPZ = mPZ;
}
public String getmDP() {
return mDP;
}
public void setmDP(String mDP) {
this.mDP = mDP;
}
public String getmCO() {
return mCO;
}
public void setmCO(String mCO) {
this.mCO = mCO;
}
public String getmPMFCT() {
return mPMFCT;
}
public void setmPMFCT(String mPMFCT) {
this.mPMFCT = mPMFCT;
}
public String getmDPNM() {
return mDPNM;
}
public void setmDPNM(String mDPNM) {
this.mDPNM = mDPNM;
}
}
package com.example.audiovisualrecord.utils.api.searchdp;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class DPResultList {
@SerializedName("ResultList")
@Expose
private List<DPResponse> mDPResponseList;
public List<DPResponse> getmDPResponseList() {
return mDPResponseList;
}
public void setmDPResponseList(List<DPResponse> mDPResponseList) {
this.mDPResponseList = mDPResponseList;
}
}
package com.example.audiovisualrecord.utils.api.searchpz;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class PZRequest {
@SerializedName("AuthorizedId")
@Expose
private String authorizedId;
@SerializedName("IdNo")
@Expose
private String idNo;
public PZRequest(String authorizedId, String idNo) {
this.authorizedId=authorizedId;
this.idNo=idNo;
}
public String getAuthorizedId() {
return authorizedId;
}
public void setAuthorizedId(String authorizedId) {
this.authorizedId = authorizedId;
}
public String getIdNo() {
return idNo;
}
public void setIdNo(String idNo) {
this.idNo = idNo;
}
}
package com.example.audiovisualrecord.utils.api.searchpz;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class PZResponse {
@SerializedName("PZ")
@Expose
private String mPZ;
@SerializedName("PZNM")
@Expose
private String mPZNM;
public String getmPZ() {
return mPZ;
}
public void setmPZ(String mPZ) {
this.mPZ = mPZ;
}
public String getmPZNM() {
return mPZNM;
}
public void setmPZNM(String mPZNM) {
this.mPZNM = mPZNM;
}
}
package com.example.audiovisualrecord.utils.api.searchpz;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class PZResultList {
@SerializedName("ResultList")
@Expose
private List<PZResponse> mNTFCTResponse;
public List<PZResponse> getmNTFCTResponse() {
return mNTFCTResponse;
}
public void setmNTFCTResponse(List<PZResponse> mNTFCTResponse) {
this.mNTFCTResponse = mNTFCTResponse;
}
}
package com.example.audiovisualrecord.utils.api.searchshift;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class SHIFTRequest {
@SerializedName("AuthorizedId")
@Expose
private String authorizedId;
@SerializedName("IdNo")
@Expose
private String idNo;
@SerializedName("CO")
@Expose
private String mCO;
@SerializedName("PMFCT")
@Expose
private String mPMFCT;
public SHIFTRequest(String authorizedId, String idNo, String mCO, String mPMFCT) {
this.authorizedId=authorizedId;
this.idNo=idNo;
this.mCO=mCO;
this.mPMFCT=mPMFCT;
}
public String getAuthorizedId() {
return authorizedId;
}
public void setAuthorizedId(String authorizedId) {
this.authorizedId = authorizedId;
}
public String getIdNo() {
return idNo;
}
public void setIdNo(String idNo) {
this.idNo = idNo;
}
public String getmCO() {
return mCO;
}
public void setmCO(String mCO) {
this.mCO = mCO;
}
public String getmPMFCT() {
return mPMFCT;
}
public void setmPMFCT(String mPMFCT) {
this.mPMFCT = mPMFCT;
}
}
package com.example.audiovisualrecord.utils.api.searchshift;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class SHIFTResponse {
@SerializedName("Shift")
@Expose
private String mShift;
public String getmShift() {
return mShift;
}
public void setmShift(String mShift) {
this.mShift = mShift;
}
}
package com.example.audiovisualrecord.utils.api.searchshift;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class SHIFTResultList {
@SerializedName("ResultList")
@Expose
private List<SHIFTResponse> mSHIFTResponseList;
public List<SHIFTResponse> getmSHIFTResponseList() {
return mSHIFTResponseList;
}
public void setmSHIFTResponseList(List<SHIFTResponse> mSHIFTResponseList) {
this.mSHIFTResponseList = mSHIFTResponseList;
}
}
package com.example.audiovisualrecord.utils.rxjava;
import io.reactivex.Scheduler;
/**
* Created by 5*N on 2017/12/31
*/
public interface SchedulerProvider {
Scheduler ui();
Scheduler computation();
Scheduler io();
Scheduler newThread();
}
package com.example.audiovisualrecord.utils.rxjava;
import io.reactivex.Scheduler;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
/**
* Created by 5*N on 2017/12/31
*/
public class SchedulerProviderImp implements SchedulerProvider {
public SchedulerProviderImp() {
}
@Override
public Scheduler ui() {
return AndroidSchedulers.mainThread();
}
@Override
public Scheduler computation() {
return Schedulers.computation();
}
@Override
public Scheduler io() {
return Schedulers.io();
}
@Override
public Scheduler newThread() {
return Schedulers.newThread();
}
}
package com.example.audiovisualrecord.utils.sharepreferences;
import android.content.Context;
/**
* Created by 5*N on 2018/1/1.
*/
public class LoginPreferences extends PreferencesHelper implements LoginPreferencesProvider {
private final String SP_FiLE_NAME = LoginPreferences.class.getName();
private final String PERSON_ID = "PERSON_ID";
private final String PERSON_NAME = "PERSON_NAME";
private final String FACTORY_NUMBER="FACTORY_NUMBER";
private final String PERSON_PASSWORD="PERSON_PASSWORD";
private final String TOKEN="TOKEN";
public LoginPreferences(Context context) {
super(context);
}
@Override
public String getClassName() {
return SP_FiLE_NAME;
}
@Override
public void setPersonPassword(String mPassword) {
save(Type.STRING, PERSON_PASSWORD, mPassword);
}
@Override
public void setToken(String token) {
save(Type.STRING, TOKEN, token);
}
@Override
public void setPersonId(String mPersonId) {
save(Type.STRING, PERSON_ID, mPersonId);
}
@Override
public void setPersonName(String mName) {
save(Type.STRING, PERSON_NAME, mName);
}
@Override
public void setFactoryNumber(String mNumber) {
save(Type.STRING, FACTORY_NUMBER, mNumber);
}
@Override
public String getPersonId() {
return (String) get(Type.STRING, PERSON_ID);
}
@Override
public String getPersonName() {
return (String) get(Type.STRING, PERSON_NAME);
}
@Override
public String getFactoryNumber() {
return (String) get(Type.STRING, FACTORY_NUMBER);
}
@Override
public String getPersonPassword() {
return (String) get(Type.STRING, PERSON_PASSWORD); }
@Override
public String getToken() {
return (String) get(Type.STRING, TOKEN); }
}
package com.example.audiovisualrecord.utils.sharepreferences;
/**
* Created by 5*N on 2018/1/1.
*/
public interface LoginPreferencesProvider {
void setPersonPassword(String mPassword);
void setToken(String token);
void setPersonId(String mPersonId);
void setPersonName(String mName);
void setFactoryNumber(String mNumber);
String getPersonId();
String getPersonName();
String getFactoryNumber();
String getPersonPassword();
String getToken();
}
package com.example.audiovisualrecord.utils.sharepreferences;
import android.content.Context;
import android.content.SharedPreferences;
import java.util.HashSet;
/**
* Created by ameng on 2016/6/20.
*/
public abstract class PreferencesHelper {
private Context context;
public PreferencesHelper(Context context) {
this.context = context;
}
public abstract String getClassName();
public Context getContext() {
return context;
}
public void save(Type type, String key, Object vale) {
SharedPreferences store = context.getSharedPreferences(getClassName(), Context.MODE_PRIVATE);
SharedPreferences.Editor editor = store.edit();
if (type == Type.STRING) {
editor.putString(key, (String) vale);
} else if (type == Type.FLOAT) {
editor.putFloat(key, (Float) vale);
} else if (type == Type.INT) {
editor.putInt(key, (Integer) vale);
} else if (type == Type.LONG) {
editor.putLong(key, (Long) vale);
} else if (type == type.BOOLEAN) {
editor.putBoolean(key, (Boolean) vale);
} else if (type == type.STRING_SET) {
editor.putStringSet(key, (HashSet<String>) vale);
} else {
throw new RuntimeException("Must use base type(String, Float, Double, Integer, Long), type from input is " + type.getClass().getName() + ".");
}
editor.commit();
}
public Object get(Type type, String key) {
SharedPreferences store = context.getSharedPreferences(getClassName(), Context.MODE_PRIVATE);
if (type == Type.STRING) {
return store.getString(String.valueOf(key), "");
} else if (type == Type.FLOAT) {
return store.getFloat(String.valueOf(key), 0);
} else if (type == Type.DOUBLE) {
return Double.valueOf(store.getString(String.valueOf(key), String.valueOf(0.0)));
} else if (type == Type.INT) {
return store.getInt(String.valueOf(key), 0);
} else if (type == Type.LONG) {
return store.getLong(String.valueOf(key), 0);
} else if (type == type.BOOLEAN) {
return store.getBoolean(key, false);
} else if (type == type.STRING_SET) {
return store.getStringSet(key, new HashSet<String>());
} else {
throw new RuntimeException("Must use base type(String, Float, Double, Integer, Long), type from input is " + type.getClass().getName() + ".");
}
}
public static class Type {
public static final Type STRING = new Type();
public static final Type FLOAT = new Type();
public static final Type DOUBLE = new Type();
public static final Type INT = new Type();
public static final Type LONG = new Type();
public static final Type BOOLEAN = new Type();
public static final Type STRING_SET = new Type();
}
}
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillType="evenOdd"
android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
android:strokeWidth="1"
android:strokeColor="#00000000">
<aapt:attr name="android:fillColor">
<gradient
android:endX="78.5885"
android:endY="90.9159"
android:startX="48.7653"
android:startY="61.0927"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/greenhulk"/>
<stroke
android:width="5.0dip"
android:color="@color/linearlayoutFrame" />
</shape>
\ No newline at end of file
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/grey" />
</shape>
\ No newline at end of file
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke
android:width="2dp"
android:color="@android:color/black" />
</shape>
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#008577"
android:pathData="M0,0h108v108h-108z" />
<path
android:fillColor="#00000000"
android:pathData="M9,0L9,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,0L19,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,0L29,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,0L39,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,0L49,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,0L59,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,0L69,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,0L79,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M89,0L89,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M99,0L99,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,9L108,9"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,19L108,19"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,29L108,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,39L108,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,49L108,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,59L108,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,69L108,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,79L108,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,89L108,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,99L108,99"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,29L89,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,39L89,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,49L89,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,59L89,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,69L89,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,79L89,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,19L29,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,19L39,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,19L49,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,19L59,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,19L69,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,19L79,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
</vector>
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment