From ae76709773c4d11670fbaf119cfe6ac54acd69f2 Mon Sep 17 00:00:00 2001 From: Julian Kast Date: Mon, 12 Apr 2021 13:19:06 -0400 Subject: [PATCH 1/6] Update gradle to version 4.1, Update menuCells to not use deprecated constructors, update voice Commands, update Alerts to use AlertManager --- MobileWeather/.idea/compiler.xml | 6 + MobileWeather/.idea/gradle.xml | 6 +- MobileWeather/.idea/jarRepositories.xml | 30 +++++ MobileWeather/.idea/misc.xml | 24 +++- MobileWeather/app/build.gradle | 3 +- .../smartdevicelink/SdlService.java | 122 +++++++----------- MobileWeather/build.gradle | 3 +- .../gradle/wrapper/gradle-wrapper.properties | 4 +- 8 files changed, 113 insertions(+), 85 deletions(-) create mode 100644 MobileWeather/.idea/compiler.xml create mode 100644 MobileWeather/.idea/jarRepositories.xml diff --git a/MobileWeather/.idea/compiler.xml b/MobileWeather/.idea/compiler.xml new file mode 100644 index 0000000..61a9130 --- /dev/null +++ b/MobileWeather/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/MobileWeather/.idea/gradle.xml b/MobileWeather/.idea/gradle.xml index f43d428..9bba60d 100644 --- a/MobileWeather/.idea/gradle.xml +++ b/MobileWeather/.idea/gradle.xml @@ -1,11 +1,10 @@ + diff --git a/MobileWeather/.idea/jarRepositories.xml b/MobileWeather/.idea/jarRepositories.xml new file mode 100644 index 0000000..0380d8d --- /dev/null +++ b/MobileWeather/.idea/jarRepositories.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MobileWeather/.idea/misc.xml b/MobileWeather/.idea/misc.xml index 99202cc..04cb9ad 100644 --- a/MobileWeather/.idea/misc.xml +++ b/MobileWeather/.idea/misc.xml @@ -5,27 +5,45 @@ - + diff --git a/MobileWeather/app/build.gradle b/MobileWeather/app/build.gradle index e24f53f..9ccf487 100644 --- a/MobileWeather/app/build.gradle +++ b/MobileWeather/app/build.gradle @@ -37,8 +37,7 @@ dependencies { testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0' - // implementation 'com.smartdevicelink:sdl_android:4.+' - implementation 'com.smartdevicelink:sdl_android:5.0.0' + implementation 'com.smartdevicelink:sdl_android:RC_5.1.0' implementation 'net.hockeyapp.android:HockeySDK:5.1.0' implementation 'com.google.android.gms:play-services-location:16.0.0' } diff --git a/MobileWeather/app/src/main/java/com/sdl/mobileweather/smartdevicelink/SdlService.java b/MobileWeather/app/src/main/java/com/sdl/mobileweather/smartdevicelink/SdlService.java index ab95715..24c1195 100644 --- a/MobileWeather/app/src/main/java/com/sdl/mobileweather/smartdevicelink/SdlService.java +++ b/MobileWeather/app/src/main/java/com/sdl/mobileweather/smartdevicelink/SdlService.java @@ -30,12 +30,15 @@ import com.sdl.mobileweather.weather.WeatherAlert; import com.sdl.mobileweather.weather.WeatherConditions; import com.sdl.mobileweather.weather.WeatherDataManager; +import com.smartdevicelink.managers.AlertCompletionListener; import com.smartdevicelink.managers.BaseSubManager; import com.smartdevicelink.managers.CompletionListener; import com.smartdevicelink.managers.SdlManager; import com.smartdevicelink.managers.SdlManagerListener; import com.smartdevicelink.managers.file.filetypes.SdlArtwork; import com.smartdevicelink.managers.lifecycle.LifecycleConfigurationUpdate; +import com.smartdevicelink.managers.screen.AlertAudioData; +import com.smartdevicelink.managers.screen.AlertView; import com.smartdevicelink.managers.screen.SoftButtonObject; import com.smartdevicelink.managers.screen.SoftButtonState; import com.smartdevicelink.managers.screen.choiceset.ChoiceCell; @@ -46,8 +49,6 @@ import com.smartdevicelink.managers.screen.menu.MenuSelectionListener; import com.smartdevicelink.protocol.enums.FunctionID; import com.smartdevicelink.proxy.RPCNotification; -import com.smartdevicelink.proxy.RPCResponse; -import com.smartdevicelink.proxy.rpc.Alert; import com.smartdevicelink.proxy.rpc.DeviceStatus; import com.smartdevicelink.proxy.rpc.OnButtonEvent; import com.smartdevicelink.proxy.rpc.OnButtonPress; @@ -69,11 +70,11 @@ import com.smartdevicelink.proxy.rpc.enums.TextAlignment; import com.smartdevicelink.proxy.rpc.enums.TriggerSource; import com.smartdevicelink.proxy.rpc.listeners.OnRPCNotificationListener; -import com.smartdevicelink.proxy.rpc.listeners.OnRPCResponseListener; import com.smartdevicelink.transport.BaseTransportConfig; import com.smartdevicelink.transport.MultiplexTransportConfig; import com.smartdevicelink.transport.TCPTransportConfig; import com.smartdevicelink.util.DebugTool; +import com.smartdevicelink.util.SystemInfo; import java.net.URL; import java.text.SimpleDateFormat; @@ -96,7 +97,6 @@ public class SdlService extends Service { private static final int STANDARD_FORECAST_DAYS = 3; private static final int DAILY_FORECAST_DAYS = 8; /* max. 8 days might be shown */ private static final int HOURLY_FORECAST_HOURS = 12; - private static final int TIMED_SHOW_DELAY = 8000; private static final String APP_ICON_NAME = "icon"; private static final String APP_ICON = APP_ICON_NAME + ".png"; private static final String APP_NAME = "MobileWeather"; @@ -154,8 +154,6 @@ public class SdlService extends Service { private Handler mHandler = null; private HMILevel currentHMILevel = HMILevel.HMI_NONE; private LinkedList mAlertQueue = new LinkedList(); - private int mLastAlertId; - private int mWelcomeCorrId; private boolean mLocationRdy = false; private boolean mConditionsRdy = false; private boolean mWelcomeComplete = false; @@ -428,7 +426,7 @@ public void onPress(SoftButtonObject softButtonObject, OnButtonPress onButtonPre forecast_item_counter = mtemp_counter; writeDisplay(true); } else { - speak("You have reached the beginning of the forecast list", autoIncCorrId++); + speak("You have reached the beginning of the forecast list"); } } @@ -450,7 +448,7 @@ public void onPress(SoftButtonObject softButtonObject, OnButtonPress onButtonPre writeDisplay(true); } if (mtemp_counter >= forecast_items.length) { - speak("You have reached the end of the forecast list", autoIncCorrId++); + speak("You have reached the end of the forecast list"); } } @@ -737,6 +735,11 @@ public LifecycleConfigurationUpdate managerShouldUpdateLifecycle(Language langua return null; } } + + @Override + public boolean onSystemInfoReceived(SystemInfo systemInfo) { + return true; + } }; // Create App Icon, this is set in the SdlManager builder @@ -789,31 +792,21 @@ public void onComplete(boolean success) { } /** - * Speaks "Welcome to MobileWeather" on first run + * Speaks "Welcome to MobileWeather" on first run */ private void performWelcomeSpeak() { - mWelcomeCorrId = autoIncCorrId++; - Speak msg = new Speak(Arrays.asList(new TTSChunk(getResources().getString(R.string.welcome_speak), SpeechCapabilities.TEXT))); - msg.setCorrelationID(mWelcomeCorrId); - msg.setOnRPCResponseListener(new OnRPCResponseListener() { - @Override - public void onResponse(int correlationId, RPCResponse response) { - if (response.getCorrelationID() == mWelcomeCorrId) { - if (mActiveInfoType == InfoType.NONE && mConditionsRdy && mLocationRdy) { - if (mAlerts != null) { - if (checkNewAlerts()) { - performWeatherAlert(mAlertQueue.pop()); - } else { - mActiveInfoType = InfoType.WEATHER_CONDITIONS; - } - } else { - mActiveInfoType = InfoType.WEATHER_CONDITIONS; - } - } + speak(getResources().getString(R.string.welcome_speak)); + if (mActiveInfoType == InfoType.NONE && mConditionsRdy && mLocationRdy) { + if (mAlerts != null) { + if (checkNewAlerts()) { + performWeatherAlert(mAlertQueue.pop()); + } else { + mActiveInfoType = InfoType.WEATHER_CONDITIONS; } + } else { + mActiveInfoType = InfoType.WEATHER_CONDITIONS; } - }); - sdlManager.sendRPC(msg); + } } /** @@ -860,7 +853,7 @@ private void createMenuCells() { vrCommands = new Vector<>(Arrays.asList(getResources().getString(R.string.vr_current), getResources().getString(R.string.vr_current_cond))); - mainCell1 = new MenuCell(getResources().getString(R.string.cmd_current_cond), null, vrCommands, new MenuSelectionListener() { + mainCell1 = new MenuCell(getResources().getString(R.string.cmd_current_cond), null, null, null, null, vrCommands, new MenuSelectionListener() { @Override public void onTriggered(TriggerSource trigger) { mActiveInfoType = InfoType.WEATHER_CONDITIONS; @@ -876,7 +869,7 @@ public void onTriggered(TriggerSource trigger) { vrCommands = new Vector<>(Arrays.asList(getResources().getString(R.string.vr_daily), getResources().getString(R.string.vr_daily_forecast))); - mainCell2 = new MenuCell(getResources().getString(R.string.cmd_daily_forecast), null, vrCommands, new MenuSelectionListener() { + mainCell2 = new MenuCell(getResources().getString(R.string.cmd_daily_forecast), null, null, null, null, vrCommands, new MenuSelectionListener() { @Override public void onTriggered(TriggerSource trigger) { mActiveInfoType = InfoType.DAILY_FORECAST; @@ -887,7 +880,7 @@ public void onTriggered(TriggerSource trigger) { vrCommands = new Vector<>(Arrays.asList(getResources().getString(R.string.vr_hourly), getResources().getString(R.string.vr_hourly_forecast))); - mainCell3 = new MenuCell(getResources().getString(R.string.cmd_hourly_forecast), null, vrCommands, new MenuSelectionListener() { + mainCell3 = new MenuCell(getResources().getString(R.string.cmd_hourly_forecast), null, null, null, null, vrCommands, new MenuSelectionListener() { @Override public void onTriggered(TriggerSource trigger) { mActiveInfoType = InfoType.HOURLY_FORECAST; @@ -898,7 +891,7 @@ public void onTriggered(TriggerSource trigger) { vrCommands = new Vector<>(Arrays.asList(getResources().getString(R.string.vr_change_units), getResources().getString(R.string.vr_units))); - mainCell4 = new MenuCell(getResources().getString(R.string.cmd_change_units), null, vrCommands, new MenuSelectionListener() { + mainCell4 = new MenuCell(getResources().getString(R.string.cmd_change_units), null, null, null, null, vrCommands, new MenuSelectionListener() { @Override public void onTriggered(TriggerSource trigger) { ChoiceSet changeUnitChoiceSet = new ChoiceSet("Units:", changeUnitCellList, new ChoiceSetSelectionListener() { @@ -922,10 +915,9 @@ public void onError(String error) { } }); vrCommands = new Vector<>(Arrays.asList(getResources().getString(R.string.vr_alerts))); - mainCell5 = new MenuCell(getResources().getString(R.string.cmd_alerts), null, vrCommands, new MenuSelectionListener() { + mainCell5 = new MenuCell(getResources().getString(R.string.cmd_alerts), null, null, null, null, vrCommands, new MenuSelectionListener() { @Override public void onTriggered(TriggerSource trigger) { - Log.i("Julian", "onTriggered: Alerts"); mActiveInfoType = InfoType.ALERTS; updateHmi(true); } @@ -1041,8 +1033,6 @@ public void onComplete(boolean success) { }); if (includeSpeak) { String speakString; - Vector chunks = new Vector(); - TTSChunk chunk = new TTSChunk(); if (temperature <= -1) { speakString = String.format(Locale.getDefault(), getResources().getString(R.string.weather_conditions_neg_temp_speak), @@ -1052,13 +1042,7 @@ public void onComplete(boolean success) { getResources().getString(R.string.weather_conditions_speak), title, temperature, humidity, windSpeed, speedUnitsFull); } - chunk.setText(speakString); - chunk.setType(SpeechCapabilities.TEXT); - chunks.add(chunk); - Speak speakRequest = new Speak(); - speakRequest.setTtsChunks(chunks); - speakRequest.setCorrelationID(autoIncCorrId++); - sdlManager.sendRPC(speakRequest); + speak(speakString); } } else { showNoConditionsAvail(); @@ -1087,7 +1071,7 @@ public void onComplete(boolean success) { } }); if (mFirstUnknownError) { - speak(getResources().getString(R.string.conditions_speak), autoIncCorrId++); + speak(getResources().getString(R.string.conditions_speak)); mFirstUnknownError = false; } } @@ -1135,7 +1119,7 @@ public void onComplete(boolean success) { } }); - speak(errorTTSStr, autoIncCorrId++); + speak(errorTTSStr); } private void writeDisplay(boolean includeSpeak) { @@ -1551,7 +1535,7 @@ public void onComplete(boolean success) { }); if (includeSpeak) { - speak(getResources().getString(R.string.weather_alerts_speak), autoIncCorrId++); + speak(getResources().getString(R.string.weather_alerts_speak)); } } } @@ -1564,33 +1548,25 @@ private void performWeatherAlert(WeatherAlert alert) { alert.message, timeString.replace(':', ' ').replace("00", "")); Log.d(SdlApplication.TAG, "performWeatherAlert: speak string - " + speakString); - Vector chunks = new Vector(); - TTSChunk chunk = new TTSChunk(); - chunk.setText(speakString); - chunk.setType(SpeechCapabilities.TEXT); - chunks.add(chunk); - - Alert alertRequest = new Alert(); - alertRequest.setTtsChunks(chunks); - alertRequest.setAlertText1(alert.message); - alertRequest.setDuration(7000); - int coId = autoIncCorrId++; - mLastAlertId = coId; - alertRequest.setCorrelationID(coId); - alertRequest.setOnRPCResponseListener(new OnRPCResponseListener() { + AlertAudioData alertAudioData = new AlertAudioData(speakString); + + AlertView.Builder builder = new AlertView.Builder(); + builder.setText(alert.message); + builder.setTimeout(7); + builder.setAudio(alertAudioData); + AlertView alertView = builder.build(); + + sdlManager.getScreenManager().presentAlert(alertView, new AlertCompletionListener() { @Override - public void onResponse(int correlationId, RPCResponse response) { - if (response.getCorrelationID() == mLastAlertId) { - if (mAlertQueue.size() > 0) { - performWeatherAlert(mAlertQueue.pop()); - } else if (mActiveInfoType == InfoType.NONE && mConditionsRdy && mLocationRdy) { - mWelcomeComplete = true; - mActiveInfoType = InfoType.WEATHER_CONDITIONS; - } + public void onComplete(boolean success, Integer tryAgainTime) { + if (mAlertQueue.size() > 0) { + performWeatherAlert(mAlertQueue.pop()); + } else if (mActiveInfoType == InfoType.NONE && mConditionsRdy && mLocationRdy) { + mWelcomeComplete = true; + mActiveInfoType = InfoType.WEATHER_CONDITIONS; } } }); - sdlManager.sendRPC(alertRequest); } private void showHourlyForecast(boolean includeSpeak) { @@ -1663,11 +1639,9 @@ private boolean checkNewAlerts() { return haveNewAlerts; } - public void speak(@NonNull String ttsText, Integer correlationID) { + public void speak(@NonNull String ttsText) { Speak msg = new Speak(Arrays.asList(new TTSChunk(ttsText, SpeechCapabilities.TEXT))); - msg.setCorrelationID(correlationID); - - sdlManager.sendRPC(msg); //TODO here + sdlManager.sendRPC(msg); } public void setGlobalProperties(String helpPrompt, String timeoutPrompt, Integer correlationID) { diff --git a/MobileWeather/build.gradle b/MobileWeather/build.gradle index a868baa..cbe1200 100644 --- a/MobileWeather/build.gradle +++ b/MobileWeather/build.gradle @@ -7,7 +7,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.4.0' + classpath 'com.android.tools.build:gradle:4.1.0' // NOTE: Do not place your application dependencies here; they belong @@ -19,6 +19,7 @@ allprojects { repositories { google() jcenter() + mavenCentral() } } diff --git a/MobileWeather/gradle/wrapper/gradle-wrapper.properties b/MobileWeather/gradle/wrapper/gradle-wrapper.properties index e9a3601..e5701b7 100644 --- a/MobileWeather/gradle/wrapper/gradle-wrapper.properties +++ b/MobileWeather/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Apr 29 09:16:54 EDT 2019 +#Mon Apr 12 09:43:03 EDT 2021 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip From 36f9653f50ecbdd9350e4f3351e321c08718412c Mon Sep 17 00:00:00 2001 From: Henigan Date: Wed, 14 Apr 2021 15:36:47 -0400 Subject: [PATCH 2/6] Update gradle line as part of release card work --- MobileWeather/app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MobileWeather/app/build.gradle b/MobileWeather/app/build.gradle index 9ccf487..ce5c712 100644 --- a/MobileWeather/app/build.gradle +++ b/MobileWeather/app/build.gradle @@ -37,7 +37,7 @@ dependencies { testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0' - implementation 'com.smartdevicelink:sdl_android:RC_5.1.0' + implementation 'com.smartdevicelink:sdl_android:5.1.0' implementation 'net.hockeyapp.android:HockeySDK:5.1.0' implementation 'com.google.android.gms:play-services-location:16.0.0' } From 243ddb0733367833c0e3f1e6ce2c3fe0fdf1ea5a Mon Sep 17 00:00:00 2001 From: Julian Kast Date: Fri, 16 Apr 2021 11:08:11 -0400 Subject: [PATCH 3/6] Remove .idea files from branch --- MobileWeather/.idea/assetWizardSettings.xml | 62 ---------- .../.idea/caches/build_file_checksums.ser | Bin 535 -> 0 bytes MobileWeather/.idea/caches/gradle_models.ser | Bin 107058 -> 0 bytes MobileWeather/.idea/codeStyles/Project.xml | 113 ------------------ MobileWeather/.idea/compiler.xml | 6 - MobileWeather/.idea/encodings.xml | 4 - MobileWeather/.idea/gradle.xml | 21 ---- MobileWeather/.idea/jarRepositories.xml | 30 ----- MobileWeather/.idea/misc.xml | 52 -------- MobileWeather/.idea/runConfigurations.xml | 12 -- MobileWeather/.idea/vcs.xml | 6 - 11 files changed, 306 deletions(-) delete mode 100644 MobileWeather/.idea/assetWizardSettings.xml delete mode 100644 MobileWeather/.idea/caches/build_file_checksums.ser delete mode 100644 MobileWeather/.idea/caches/gradle_models.ser delete mode 100644 MobileWeather/.idea/codeStyles/Project.xml delete mode 100644 MobileWeather/.idea/compiler.xml delete mode 100644 MobileWeather/.idea/encodings.xml delete mode 100644 MobileWeather/.idea/gradle.xml delete mode 100644 MobileWeather/.idea/jarRepositories.xml delete mode 100644 MobileWeather/.idea/misc.xml delete mode 100644 MobileWeather/.idea/runConfigurations.xml delete mode 100644 MobileWeather/.idea/vcs.xml diff --git a/MobileWeather/.idea/assetWizardSettings.xml b/MobileWeather/.idea/assetWizardSettings.xml deleted file mode 100644 index 58a3dac..0000000 --- a/MobileWeather/.idea/assetWizardSettings.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/MobileWeather/.idea/caches/build_file_checksums.ser b/MobileWeather/.idea/caches/build_file_checksums.ser deleted file mode 100644 index fa4f31f23dbb7180daff61d673bd4a03d9ccd309..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 535 zcmZ4UmVvdnh`~NNKUXg?FQq6yGexf?KR>5fFEb@IQ7^qHF(oHeub?PDD>b=9F91S2 zm1gFoxMk*~I%lLNXBU^|7Q2L-Ts|(GuF1r}nf0c10S!18}mhbLxkeX0=^7o4WADqX_B zlLYcFOjjX89RnLkVa}B`&Td6czom};p3Lw)XF&;2C_gzd2NYTbsYNB3sl}ym#SurB zbs4N~`f+~Vi`Svo9cGs>sOg6mrxq3KCuQa&=IBFB*GB|6h7ng}dv5kKY+`xYz&Yd1 z52v~k20=Wk1$LJOoPVqN!(x@g!Gcdo`astu78K}X_sW7Y*(A>*0j}rD>7oAB1rI9# DbBeq} diff --git a/MobileWeather/.idea/caches/gradle_models.ser b/MobileWeather/.idea/caches/gradle_models.ser deleted file mode 100644 index cbce097c4e8eccec59c3388d006886bcb3edfdcc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107058 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 z zhg`{I9IG^9bjIi0_kH53W1mQj;gqj7*My+R7Fphq>T_ij1F(Q1ra+)3R$tg(lJ0Z_ Ubc5)* - - - - -
- - - - xmlns:android - - ^$ - - - -
-
- - - - xmlns:.* - - ^$ - - - BY_NAME - -
-
- - - - .*:id - - http://schemas.android.com/apk/res/android - - - -
-
- - - - .*:name - - http://schemas.android.com/apk/res/android - - - -
-
- - - - name - - ^$ - - - -
-
- - - - style - - ^$ - - - -
-
- - - - .* - - ^$ - - - BY_NAME - -
-
- - - - .* - - http://schemas.android.com/apk/res/android - - - ANDROID_ATTRIBUTE_ORDER - -
-
- - - - .* - - .* - - - BY_NAME - -
-
-
-
-
-
\ No newline at end of file diff --git a/MobileWeather/.idea/compiler.xml b/MobileWeather/.idea/compiler.xml deleted file mode 100644 index 61a9130..0000000 --- a/MobileWeather/.idea/compiler.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/MobileWeather/.idea/encodings.xml b/MobileWeather/.idea/encodings.xml deleted file mode 100644 index 15a15b2..0000000 --- a/MobileWeather/.idea/encodings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/MobileWeather/.idea/gradle.xml b/MobileWeather/.idea/gradle.xml deleted file mode 100644 index 9bba60d..0000000 --- a/MobileWeather/.idea/gradle.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/MobileWeather/.idea/jarRepositories.xml b/MobileWeather/.idea/jarRepositories.xml deleted file mode 100644 index 0380d8d..0000000 --- a/MobileWeather/.idea/jarRepositories.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/MobileWeather/.idea/misc.xml b/MobileWeather/.idea/misc.xml deleted file mode 100644 index 04cb9ad..0000000 --- a/MobileWeather/.idea/misc.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/MobileWeather/.idea/runConfigurations.xml b/MobileWeather/.idea/runConfigurations.xml deleted file mode 100644 index 7f68460..0000000 --- a/MobileWeather/.idea/runConfigurations.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/MobileWeather/.idea/vcs.xml b/MobileWeather/.idea/vcs.xml deleted file mode 100644 index 6c0b863..0000000 --- a/MobileWeather/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file From 4c0852c92da84b3511958dcb5fd3d3b995e8a5fa Mon Sep 17 00:00:00 2001 From: Julian Kast Date: Fri, 16 Apr 2021 11:08:33 -0400 Subject: [PATCH 4/6] Add .ida files to .gitignore --- MobileWeather/.gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/MobileWeather/.gitignore b/MobileWeather/.gitignore index 5edb4ee..1ba057c 100644 --- a/MobileWeather/.gitignore +++ b/MobileWeather/.gitignore @@ -4,6 +4,10 @@ /.idea/libraries /.idea/modules.xml /.idea/workspace.xml +/.idea/misc.xml +/.idea/jarRepositories.xml +/.idea/gradle.xml +/.idea/compiler.xml .DS_Store /build /captures From a4485a01f67082c3bfe95fa7300fc340e1a2c5b4 Mon Sep 17 00:00:00 2001 From: Julian Kast Date: Fri, 16 Apr 2021 11:11:23 -0400 Subject: [PATCH 5/6] add file to .gitignore --- MobileWeather/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/MobileWeather/.gitignore b/MobileWeather/.gitignore index 1ba057c..ca419da 100644 --- a/MobileWeather/.gitignore +++ b/MobileWeather/.gitignore @@ -8,6 +8,7 @@ /.idea/jarRepositories.xml /.idea/gradle.xml /.idea/compiler.xml +/.idea/vsc.xml .DS_Store /build /captures From 9bbded36b1a344562c38bc06642a4e750d26101f Mon Sep 17 00:00:00 2001 From: Julian Kast Date: Fri, 16 Apr 2021 11:15:21 -0400 Subject: [PATCH 6/6] Add checksums file to .gitignore --- MobileWeather/.gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/MobileWeather/.gitignore b/MobileWeather/.gitignore index ca419da..0d3acb2 100644 --- a/MobileWeather/.gitignore +++ b/MobileWeather/.gitignore @@ -8,7 +8,8 @@ /.idea/jarRepositories.xml /.idea/gradle.xml /.idea/compiler.xml -/.idea/vsc.xml +/.idea/vcs.xml +/.idea/caches/build_file_checksums.ser .DS_Store /build /captures